美文网首页
2019-03-01 对象的新增方法

2019-03-01 对象的新增方法

作者: kathyever | 来源:发表于2019-03-02 16:39 被阅读0次

    对象的新增方法

    1、Object.is( )

    ES5比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===)。
    它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0。Javascript缺乏一种运算,在所有环境中,只有两个值是一样的,它们就应该相等。

    ES6提出“Same-value equality”(同值相等)算法,用来解决这个问题。Object.is就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。

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

    不同之处只有两个:
    1、+0不等于-0
    2、NaN等于自身

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

    2、Object.assign( )

    基本用法

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

    const target = {a:1};
    const source1 = {b:2};
    const source2 = {c:3};
    
    Object.assign(target,source1.source2);
    target //{a:1;b:2;c:3}
    //Object.assign方法的第一个参数是目标对象,后面的参数都是源对象
    
    `注意!~如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性`
    const target = { a: 1, b: 1 };
    
    const source1 = { b: 2, c: 2 };
    const source2 = { c: 3 };
    
    Object.assign(target, source1, source2);
    target // {a:1, b:2, c:3}
    
    //如果只有一个参数,Object.assign会直接返回该参数
    const obj = {a:1};
    Object.assign(obj) === obj  //true
    
    //如果该参数不是对象,则会先转成对象,然后返回
    typeof Object.assign(2) //"object"
    
    //由于undefined和null无法转成对象,所以如果他们作为参数会报错
    Object.assign(undefined)  //报错
    Object.assign(null)  //报错
    
    //但是如果费对象参数参数出现在源对象的位置,那么出力规则就不同。
    //这些参数会转成对象,无法转对象的就会跳过。
    //这意味着如果undefined和null不在首参数,就不会报错。
    

    注意点

    1)浅拷贝

    Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用

    const obj1={a:{b:1}};
    const obj2=Object.assign({},obj1);
    
    obj1.a.b = 2;  //2
    

    2)同名属性的替换

    对于这种嵌套的对象,一旦遇到同名属性,Object.assign的处理方法是替换,而不是添加。

    const target = {a:{b:'c',d:'e'}}
    const source = {a:{b:'hello'}}
    Object.assign(target,source)
    //{ a: { b: 'hello' } }
    

    3、数组的处理

    Object.assign可以用来处理数组,但是会把数组视为对象

    Object.assign([1,2,3],[4,5])
    //[4,5,3]
    

    4、取值函数的处理

    Object.assign只能进行值的赋值,如果要复制的值是一个取值函数,那么将求值后再复制

    const source = {
        get foo(){return 1}
    };
    const target = {};
    
    Object.assign(target,source)
    // { foo: 1 }
    

    相关文章

      网友评论

          本文标题:2019-03-01 对象的新增方法

          本文链接:https://www.haomeiwen.com/subject/shbruqtx.html