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 }
屬性被后續(xù)參數(shù)中具有相同屬性的其他對象覆蓋。
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}}