Object.assign()是浅拷贝还是深拷贝?

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 时,obj2a 属性不受影响。但是,当我们修改 obj1 的引用类型属性 b 时,obj2b 属性也受到了影响,因为它们共享同一个引用。

posted @ 2024-12-27 09:19  王铁柱6  阅读(168)  评论(0)    收藏  举报