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