object,assign方法

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}}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容