zoukankan      html  css  js  c++  java
  • 关于es6中对象的扩展

    1.Object.is()

    es5比较两个值是否相等,只有两个运算符,相等(==) 和 严格相等(===),他们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0 等于 -0。es6提出了Object.is()方法,它用来比较两个值是否相等,与严格运算符(===)的行为基本一致 

    Object.is('foo', 'foo')  //false     Object.is({} , {}) //false  

    不同之处只有两个, Object.is(+0, -0) // true  Object.is(NaN , NaN) // true

    2.Object.assign()

    Object.assign 方法用于将源对象的所有可枚举属性复制到目标对象

    var target = { a: 1}
    
    var source = { b:2 }
    var source2 = { c: 3}
    
    Object.assign(target , source, source2)
    
    target //  { a: 1, b: 2, c:3 } 
    // 第一个参数是目标对象,后面的是源对象

    注意:如果目标对象和源对象有重名属性, 或多个源对象有同名属性,则后面的属性会覆盖前面的属性

    如果只有一个参数,Object.assign会直接返回该参数

    var obj = { a: 1}
    Object.assign(obj) === obj

    如果该参数不是对象,则会先转成对象,然后返回

    typeof Object.assign(2) // 'object'

    由于null 和 undefined 无法转成对象,所以如果将他们作为参数,就会报错, 如果他们不再首参数,便不会报错,会跳过他们;其他类型的值不再首参数也不会报错,但是除了,字符串会以数组的形式复制到目标对象,其他值不会产生效果。

    var v1 = 'abc'
    var v2 = true
    var v3 = 10
    var obj = Object.assign({}, v1, v2, v3)
    obj // { "0": "a", "1": 'b", "2": "c"}

    注意:Object.assign 是浅拷贝

    常见用途: 为对象添加属性、克隆对象、为对象添加方法、为属性制定默认值

    3.Object.keys()

    es5引入了Object.keys方法,返回一个数组,成员是参数对象自身(不含继承)所有可遍历(enumerable)属性的键名。

    var obj = { foo: 'bar', baz: 42}
    Object.keys(obj) // ["foo", "baz"]

    4. Object.values()方法返回一个数组,成员是参数对象自身的所有(不含继承)可遍历

    var obj = { foo: 'bar', baz: 42}
    Object.values(obj) // ["bar", 42]

    5.Object.entries

    Object.entries返回一个数组成员是参数对象自身所有可遍历属性的键值对数组

    var obj = { foo: 'bar', baz: 42}
    Object.entries(obj) // [ ["foo", "bar"], ["baz", 42]]
  • 相关阅读:
    Oralce中备份,还原数据库
    Linux基础--目录了解以及安装后的优化
    PHP学习之旅——PHP环境搭建
    在虚拟机上安装Linux系统
    Hibernate 命名查询
    MyBatis入门案例
    MyBatis中关于别名typeAliases的设置
    SpingMvc中的异常处理
    无意之间发现的Servlet3.0新特性@WebServlet
    SpringMvc核心流程以及入门案例的搭建
  • 原文地址:https://www.cnblogs.com/czy960731/p/9725243.html
Copyright © 2011-2022 走看看