javascript - 删除原始对象,同时在 JavaScript 中保留其副本

标签 javascript javascript-objects

我测试了 JavaScript 对象在 Chrome 控制台中的行为方式。可以肯定地说这在任何地方都适用吗? :

a = new Object()
>> Object {}
b = a
>> Object {}
a.boo = "Yiss!"
>> "Yiss!"
b
>> Object {boo: "Yiss!"}
a = new Object()
>> Object {}
b
>> Object {boo: "Yiss!"}
a = b
>> Object {boo: "Yiss!"}
delete a.boo
>> true
b
>> Object {}
a
>> Object {}
delete a
>> true
a
>> Uncaught ReferenceError: a is not defined
b
>> Object {}

TL;DR

我只是想弄清楚以下陈述是否正确: 在对象的多个副本之一中进行的修改可在该对象的所有副本上使用。如果副本或原始对象被删除或被新对象替换,则不会影响其他副本。

最佳答案

delete 所做的只是从对象中删除属性。它实际上并没有对属性的做任何事情。

这里的

ab相当于window.awindow.b,因为它们是全局的, window 是全局对象。因此,delete a 相当于 delete window.a,它只是从 window 对象中删除 a 属性。

由于 JavaScript 中的变量不存储对象,而是存储对对象的引用删除所做的只是删除包含引用<的变量/em> 继续被 b 引用的同一对象。

所以,你的问题本身是有缺陷的,因为它是基于对 JavaScript 中对象语义的错误理解:

If a copy or the original is deleted or replaced by a new object, it doesn't impact other copies.

在此上下文中不存在“副本”或“原件”之类的内容。该对象根本没有被复制。您只需拥有一个由多个变量引用的对象。而且,JavaScript 中不存在显式“删除对象”的概念。

关于javascript - 删除原始对象,同时在 JavaScript 中保留其副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27447176/

相关文章:

javascript - 单击按钮时如何生成一组数组而不消失第一个数组?

javascript - 没有重复链接的响应式导航?

javascript - Javascript 临时对象是否需要引用变量和/或闭包?

javascript从带有对象的数组中获取字段

javascript - 如何访问 module.exports 中的对象属性

javascript - 一个组件的数据输出到另一个组件。 Angular 5

javascript - 将 fontawesome 图标设置为占位符

javascript - 使用 jquery 添加/删除 ul 列表的事件类?

javascript - 查找 bool 值 JavaScript 对象数组的总和

javascript - 如何将javascript对象值传递给其 "child"对象