问题描述
delete运算符仅删除引用,而不删除对象本身。如果确实删除了对象本身,则其他剩余的引用将像C ++删除一样悬而未决。(访问其中之一将导致崩溃。将它们全部变为null意味着删除时需要额外的工作或为每个对象额外的内存。)
由于Javascript是垃圾收集的,因此您无需删除对象本身-当无法再引用它们时,它们将被删除。
完成对对象的引用后,删除它们可能很有用,因为这为垃圾回收器提供了有关可以回收的内容的更多信息。如果对大型对象的引用仍然存在,则可能导致该对象无法回收- 即使程序的其余部分实际上并未使用该对象。
解决方法
我对JavaScript的delete
运算符有些困惑。采取以下代码:
var obj = {
helloText: "Hello World!"
};
var foo = obj;
delete obj;
执行完这段代码后,obj
is null
,但foo
仍指与完全相同的对象obj
。我猜这个对象是foo
指向相同的对象。
这使我感到困惑,因为我希望写操作可以delete obj
删除obj
指向内存中的对象,而不仅仅是变量obj
。
这是因为JavaScript的垃圾回收工作在保留/释放的基础,所以,如果我没有指向对象的任何其他变量,它 会 从内存中清除?
(顺便说一下,我的测试是在Safari 4中完成的。)