ECMAscript新特性 - 对象扩展方法 assign、is

367 阅读2分钟

ECMAscript 2015 中为Object对象提供了一些扩展方法,这里我们看几个主要的方法。

  • assign 方法:将多个源对象中的属性复制到一个目标对象中。如果对象当中有相同的属性那么源对象当中的属性将覆盖掉目标对象当中的属性,这里所说的愿对象和目标对象其实都是普通的对象,只不过用处不同我们是从源对象中取然后往目标对象当中放。支持传入任意个数的对象,第一个参数是目标对象也就是说所有源对象中的属性都会复制到这个对象当中,剩下的都是源对象,它的返回值也就是这个目标对象。常用在对象复制的使用场景中,除此以外 Object.assign 用来为 options 对象参数去设置默认值也是一个常见的应用场景。

    const source1 = {
    a: 123,
    b: 123,    }
    const target = {
    a: 456,
    c: 456,    }
    const result = Object.assign(target, source1)
    console.log(target) // {a:123, b:123, c: 456}
    console.log(result === target) // true
    // assign 使用场景
    function copyObj (obj) {
    // 如果在函数内部修改了 obj,在外部的 obj 也会被修改,因为它们指向同一个内存地址
    // 如果只是希望在这个函数的内部去修改这对象,就可以使用 Object.assign 方法去
    // 把这个对象复制到一个全新的空对象上,这样的话内部的对象就是一个全新的对象
    // 它的修改也不会影响到外部对象
    return Object.assign({}, obj)   }
    const resultCopy = copyObj(result)
    console.log(result === resultCopy) // false
    
  • is方法:用来判断两个值是否相等。在此之前如果要判断两个值是否相等可以使用 == 、 === ,这两者之间的区别就是: == 运算符比较之前自动转化数据类型就会导致 0 == flase 这种情况是成立的;=== 严格对比两者之间的数值是否相同,因为 0 和 false 它们的类型不同所以所它们是不会严格相等的。严格相等运算符也有一个特殊情况:首先就是对于数字 0 它的正负是没有办法区分的;其次是 NaN,两个 NaN 在严格相等的运算结果是 false,NaN 代表非数字说明它有无限多的可能,所以说两个 NaN 是不相等的,但现在看来 NaN 就是一个特别的值,所以所两个 NaN 应该是完全相等的,在 ES2015 中就提出了一种新的同值比较的算法,可以使用 Object 全新的 is 方法来解决这个问题。

    Object.is(+0, -0) // false
    Object.is(NaN, NaN) // true