在节点终端中:
> o={a:1}
{ a: 1 }
> p=o //set p=o(if I change anything in p or o, it reflects to the references
{ a: 1 }
> p=null //but setting p=null
null
> o
{ a: 1 } //don't set o to null
所以我问,为什么会发生这种情况,更重要的是,通过一个引用(或原始引用)我可以删除对该内存位置的每个引用吗?
这样,我就可以在对 p 执行某些操作时删除“o”?
谢谢
最佳答案
为什么会发生这种情况:
p
和 o
从技术上讲不是对象,它们是对对象的引用。只要至少有一个对它的引用存在,该对象就存在。*
当您将 p 设置为 null 时,您只需更改 p,使其不再引用与 o 相同的对象 - 您更改的是引用的值,而不是对象的值。除了将每个引用单独设置为 null 之外,没有任何机制可以消除对该对象的所有引用。
但是,您可以使用任何引用来删除对象上的所有属性,例如你可以这样做:
delete p.a;
这将使 o 引用一个现在为空的对象。
*它比这更复杂一点,因为现代 JavaScript 引擎可以正确地进行垃圾收集循环引用。
关于javascript - 如何删除 javascript 对象的所有引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41307853/