javascript - 如何删除 javascript 对象的所有引用?

标签 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

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

这样,我就可以在对 p 执行某些操作时删除“o”?

谢谢

最佳答案

为什么会发生这种情况:

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

当您将 p 设置为 null 时,您只需更改 p,使其不再引用与 o 相同的对象 - 您更改的是引用的值,而不是对象的值。除了将每个引用单独设置为 null 之外,没有任何机制可以消除对该对象的所有引用。

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

delete p.a;

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

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

关于javascript - 如何删除 javascript 对象的所有引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41307853/

相关文章:

javascript - 向虹膜颜色选择器添加更多调色板,而不覆盖当前调色板?

javascript - 动态绑定(bind)预输入选择事件 (jQuery)

javascript - 在 jsdom 中加载 Google Maps API

javascript - 运算符管道是否创建类似于过滤器、映射、减少创建中间数组的中间可观察对象?

javascript - 每次点击 jquery 时触发动画

javascript - 剧作家无法捕获 response.json()

javascript - 检查 AngularJs 中的互联网连接并显示 PopUp

javascript - 可拖动图库 - 超出视口(viewport)问题

javascript - React 表单提交 - 字段始终为空

javascript - jquery加载函数不调用Spring Boot Controller 来替换thymeleaf模板片段