JavaScript 复制对象是一个比较常见的操作,常常用于在不改变原对象的情况下,创建一个新的对象并将原对象的属性值完全复制到新对象中。但是,在使用 Object.assign() 方法实现复制对象时,我们会发现这个方法无法实现深复制。这个问题在 JS 开发中非常常见,接下来我们将通过两个示例来详细解释为什么 Object.assign 方法无法实现深复制以及如何解决这个问题。
示例一:
const obj1 = {
a: 1,
b: {
c: 2
}
};
const obj2 = Object.assign({}, obj1);
obj1.b.c = 3;
console.log(obj2.b.c); // 3
在上面的示例中,我们创建了一个包含多层嵌套对象的 obj1,并使用 Object.assign 方法将其复制到 obj2 中。接着,我们修改了 obj1 中嵌套对象的属性值,并打印了 obj2 对应属性的值。运行这段代码后,我们可以发现 obj2.b.c 的值也被修改了。这是因为 Object.assign 方法只会浅复制对象中的属性,对于嵌套对象并不会进行深复制。
示例二:
const obj1 = {
a: 1,
b: {
c: 2
}
};
const obj2 = JSON.parse(JSON.stringify(obj1));
obj1.b.c = 3;
console.log(obj2.b.c); // 2
在上面的示例中,我们使用了 JSON.parse(JSON.stringify(obj1)) 的方式来复制 obj1 对象,并将其赋值给 obj2。在运行这段代码后,我们可以发现 obj2.b.c 的值并没有被修改,这是因为 JSON.parse(JSON.stringify()) 可以实现深复制。对于复杂对象,使用 JSON 方式实现深复制是比较可靠的解决方法。
因此,总结一下:
- Object.assign 方法只能复制对象的第一层属性,无法实现深复制。
- 对于嵌套对象复制,可以通过 JSON.parse(JSON.stringify()) 的方式来实现深复制。
希望这篇文章能够解决你的疑问。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript 复制对象与Object.assign方法无法实现深复制 - Python技术站