删除JavaScript中的对象

删除JavaScript中的对象

我有点困惑于JavaScript的delete接线员。取以下代码:

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

在这段代码被执行之后,objnull,但是foo仍然是指一个完全类似的对象obj..我猜这个对象是同一个对象foo指向。

这让我很困惑,因为我期待着写作delete obj删除了以下对象obj在内存中指向-而不仅仅是变量obj.

这是因为JavaScript的垃圾收集器是在保留/发布的基础上工作的,所以如果我没有指向对象的任何其他变量,那么从记忆中移除?

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


蛊毒传说
浏览 746回答 3
3回答

繁花不似锦

DELETE运算符只删除引用,而不删除对象本身。如果它确实删除了对象本身,其他剩余的引用就会悬挂起来,就像C+DELETE一样。(访问其中一个会导致崩溃。要使它们都变为空,就意味着在删除时需要额外的工作,或者为每个对象增加额外的内存。)因为Javascript是垃圾收集的,所以您不需要自己删除对象-当无法再引用对象时,它们将被删除。如果您完成了对象的引用,删除它们可能是有用的,因为这将为垃圾收集器提供更多有关可以回收的信息。如果对一个大型对象的引用仍然存在,这可能导致它无法回收-即使您的程序的其他部分实际上没有使用该对象。

慕工程0101907

“变量隐式声明”是全局对象的属性,因此DELETE对它们进行工作,就像对任何属性一样。用var声明的变量是不可摧毁的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript