Object.assign(target, ...sources)``<br />

复制对象

  1. const obj = { a: 1 };
  2. const copy = Object.assign({}, obj);
  3. console.log(copy); // { a: 1 }

深拷贝问题

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

  1. let obj1 = { a: 0 , b: { c: 0}};
  2. let obj2 = Object.assign({}, obj1);
  3. console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
  4. obj1.a = 1;
  5. console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
  6. console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
  7. obj2.a = 2;
  8. console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
  9. console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 0}}
  10. obj2.b.c = 3;
  11. console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}}
  12. console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}}
  13. // Deep Clone
  14. obj1 = { a: 0 , b: { c: 0}};
  15. let obj3 = JSON.parse(JSON.stringify(obj1));
  16. obj1.a = 4;
  17. obj1.b.c = 4;
  18. console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}

合并对象

  1. const o1 = { a: 1 };
  2. const o2 = { b: 2 };
  3. const o3 = { c: 3 };
  4. const obj = Object.assign(o1, o2, o3);
  5. console.log(obj); // { a: 1, b: 2, c: 3 }
  6. console.log(o1); // { a: 1, b: 2, c: 3 }, 注意目标对象自身也会改变。

合并具有相同属性的对象

  1. const o1 = { a: 1, b: 1, c: 1 };
  2. const o2 = { b: 2, c: 2 };
  3. const o3 = { c: 3 };
  4. const obj = Object.assign({}, o1, o2, o3);
  5. console.log(obj); // { a: 1, b: 2, c: 3 }