我对JavaScript的delete
操作符感到有些困惑。看下面这段代码:
var obj = {
helloText: "Hello World!"
};
var foo = obj;
delete obj;
执行完这段代码后,obj
是null
,但是foo
仍然引用着一个和obj
完全一样的对象。我猜测这个对象就是foo
指向的那个对象。这让我感到困惑,因为我本来希望使用
delete obj
语句可以从内存中删除obj
所指向的对象,而不仅仅是删除变量obj
本身。这是因为JavaScript的垃圾回收器是基于保留/释放机制工作的,所以如果没有其他变量指向这个对象的话,它将会被从内存中删除。
(顺便说一下,我的测试是在Safari 4上进行的。)
var obj = { helloText: "Hello World!" }; var foo = obj; delete obj;
注意:对象并没有被删除,请检查obj
。 正确的用法是:delete obj.helloText
然后再检查foo
,此时foo
就变成了一个空对象。 - Umair Ahmeddelete`在Javascript中并不是用于删除对象的。`delete`用于移除对象的键。在您的情况下 `var obj = { helloText: "Hello World!" }; var foo = obj; delete obj;`, 对象并没有被删除。请检查`obj`。然后运行`delete obj.helloText`,您会看到`foo`现在指向一个空对象。
- PacerierObject.defineProperty()
/Object.defineProperties()
定义属性,任何未显式设置为configurable: true
的属性都无法被删除。嘿,我曾经为此苦恼了一段时间。 - Phil Tune