gpt4 book ai didi

javascript - 从浅复制对象中删除属性

转载 作者:行者123 更新时间:2023-12-05 06:47:46 25 4
gpt4 key购买 nike

如果我有一个对象,以及它的浅拷贝。例如:

var person = {
name: "Foo",
age: 10,
child: {
name: "Matrix"
}
}

var copiedPerson = {...person}
console.log(person, copiedPerson);

如果我更改 person.name = "NewName";,copedPerson 将保持不变。

如果我更改 person.age = 8;,copiedPerson 将保持不变。

但如果我更改 person.child.name = "Neo";copiedPerson.name 也将通过引用指向同名“Neo”。

这一切我都清楚。

但我不明白,为什么当我delete person.child;时,copiedPerson.child;没有任何反应

在我的逻辑中,当我更改其中一个时,它们都会发生变化,现在我还期望当其中一个被删除时,另一个也应该被删除。 (因为它们引用内存中的相同位置)

有人可以向我解释为什么这没有发生以及我误解了哪一部分吗?

最佳答案

您现在对引用文献的心智模型存在一点差距。因此,从本质上讲,您了解如果更改嵌套对象 person.child.name,则 copiedPerson.child.name 中的值也会更改。

但归根结底,child 属性只包含 personcopiedPerson 对象。

因此,当您从原始 person 对象中删除它时,您从 person 的子属性中删除了这个嵌套对象的 reference 但这个嵌套对象仍然存在在内存中

因此,copiedPerson.child中包含的引用仍然保持不变,可以访问保存在内存中的这个对象

关于javascript - 从浅复制对象中删除属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66975810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com