Object.assign()方法和扩展运算符都是浅拷贝。
eg:
var obj1 = {a: {b: 1}};
var obj2 = Object.assign({}, obj1);
obj1.a.b = 2;
obj2.a.b // 2
eg:
let outObj = {
inObj: {a: 1, b: 2};
};
let newObj = {...outObj};
newObj.inObj.a = 2;
console.log(outObj); // {inObj: {a: 2, b: 2}}
区别
- Object.assign()方法第一个参数是目标对象,后面的参数都是源对象,它将源对象的所有可枚举属性复制到目标对象上。它修改了目标对象,因此会触发ES6 setter。
- 使用扩展操作符时,数组或对象中的每一个值都会被拷贝到一个新的数组或对象中;它不复制继承的属性或者类的属性,但是它会复制ES6的symbols属性。