在JavaScript中删除对象

问题描述

delete运算符仅删除引用,而不删除对象本身。如果确实删除了对象本身,则其他剩余的引用将像C ++删除一样悬而未决。(访问其中之一将导致崩溃。将它们全部变为null意味着删除时需要额外的工作或为每个对象额外的内存。)

由于Javascript是垃圾收集的,因此您无需删除对象本身-当无法再引用它们时,它们将被删除

完成对对象的引用后,删除它们可能很有用,因为这为垃圾回收器提供了有关可以回收的内容的更多信息。如果对大型对象的引用仍然存在,则可能导致该对象无法回收- 即使程序的其余部分实际上并未使用该对象。

解决方法

我对JavaScript的delete运算符有些困惑。采取以下代码:

var obj = {
    helloText: "Hello World!"
};

var foo = obj;

delete obj;

执行完这段代码后,objis null,但foo仍指与完全相同的对象obj。我猜这个对象是foo指向相同的对象。

这使我感到困惑,因为我希望写操作可以delete obj删除obj指向内存中的对象,而不仅仅是变量obj

这是因为JavaScript的垃圾回收工作在保留/释放的基础,所以,如果我没有指向对象的任何其他变量,它 从内存中清除?

(顺便说一下,我的测试是在Safari 4中完成的。)

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”