Object.assign()
在 JavaScript 中是执行浅拷贝(shallow copy)的。这意味着,它只复制对象的顶层属性和值。如果对象的属性值是一个引用类型(例如,数组或另一个对象),Object.assign()
不会复制这个引用类型的实际内容,而是复制这个引用本身。因此,原对象和新对象会共享这个引用,对一个对象的修改会影响到另一个对象。
以下是一个示例,说明 Object.assign()
是浅拷贝:
let obj1 = { a: 1, b: { c: 2 } };
let obj2 = Object.assign({}, obj1);console.log(obj2); // { a: 1, b: { c: 2 } }// 修改 obj1 的顶层属性 a
obj1.a = 2;
console.log(obj1); // { a: 2, b: { c: 2 } }
console.log(obj2); // { a: 1, b: { c: 2 } },obj2 的 a 属性不受影响// 修改 obj1 的引用类型属性 b
obj1.b.c = 3;
console.log(obj1); // { a: 2, b: { c: 3 } }
console.log(obj2); // { a: 1, b: { c: 3 } },obj2 的 b 属性也受到了影响,因为它是浅拷贝
在这个示例中,当我们修改 obj1
的顶层属性 a
时,obj2
的 a
属性不受影响。但是,当我们修改 obj1
的引用类型属性 b
时,obj2
的 b
属性也受到了影响,因为它们共享同一个引用。