美文网首页
object,assign方法

object,assign方法

作者: lihaiting | 来源:发表于2019-03-11 15:25 被阅读0次

    1.复制一个对象

    constobj={a:1};

    constcopy=Object.assign({},obj);

    console.log(copy);// { a: 1 }

    2.合并对象

    consto1={a:1};

    consto2={b:2};

    consto3={c:3};

    constobj=Object.assign(o1,o2,o3);

    console.log(obj);// { a: 1, b: 2, c: 3 }

    console.log(o1);// { a: 1, b: 2, c: 3 }, 注意目标对象自身也会改变。

    3.合并具有相同属性的对象

    consto1={a:1,b:1,c:1};

    consto2={b:2,c:2};

    consto3={c:3};

    constobj=Object.assign({},o1,o2,o3);

    console.log(obj);// { a: 1, b: 2, c: 3 }

    属性被后续参数中具有相同属性的其他对象覆盖。

    4.深拷贝问题

    针对深拷贝,需要使用其他办法,因为 Object.assign()拷贝的是属性值。假如源对象的属性值是一个对象的引用,那么它也只指向那个引用。

    letobj1={a:0,b:{c:0}};

    letobj2=Object.assign({},obj1);

    console.log(JSON.stringify(obj2));// { a: 0, b: { c: 0}} 

    obj1.a=1;

    console.log(JSON.stringify(obj1));// { a: 1, b: { c: 0}} 

    console.log(JSON.stringify(obj2));// { a: 0, b: { c: 0}}

     obj2.a=2;

    console.log(JSON.stringify(obj1));// { a: 1, b: { c: 0}}

     console.log(JSON.stringify(obj2));// { a: 2, b: { c: 0}}

    obj2.b.c=3;

    console.log(JSON.stringify(obj1));// { a: 1, b: { c: 3}} 

    console.log(JSON.stringify(obj2));// { a: 2, b: { c: 3}}

     // Deep Clone

    obj1 = {a : 0, b : { c : 0 } };

    letobj3 = JSON.parse(JSON.stringify(obj1));

    obj1.a = 4;

    obj1.b.c = 4;

    console.log(JSON.stringify(obj3));// { a: 0, b: { c: 0}}

    相关文章

      网友评论

          本文标题:object,assign方法

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