如何删除javascript对象的每个引用?

时间:2016-12-23 21:07:42

标签: javascript

在节点终端:

> 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

所以我问,为什么会发生这种情况,更重要的是,通过一个引用(或原始引用),我可以删除对该内存位置的每个引用吗?

所以这样,我可以在做什么事情时删除'o'?

由于

2 个答案:

答案 0 :(得分:1)

  

为什么会发生这种情况

引用和对象是不同的东西。您已重新分配p以指向null(概念上)。这并没有影响其他参考文献。

  

通过一个引用(或原始引用)可以删除对该内存位置的每个引用吗?

不,这是不可能的。

答案 1 :(得分:1)

为什么会这样:

po在技术上不是对象,它们是对象的引用。只要存在至少一个对象,该对象就存在。*

当你将p设置为null时,你只是改变p使它不再引用与o相同的对象 - 你正在改变引用的值,而不是对象的值。除了将每个引用单独设置为null之外,没有任何机制可以除去对象的所有引用。

但是,您可以使用任何引用来删除对象上的所有属性,例如你可以这样做:

delete p.a;

这将使o引用一个现在为空的对象。

*它比这更复杂,因为现代JavaScript引擎可以正确地进行垃圾收集循环引用。