一尘不染

在JavaScript中删除对象

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中完成的。)


阅读 3461

收藏
2020-04-25

共1个答案

一尘不染

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

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

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

2020-04-25