Javascript'delete'在迭代循环中不起作用

时间:2011-07-21 17:42:00

标签: javascript

我是一名使用JavaScript的C / C ++ / Java程序员。

我正在尝试编写一个删除对象'obj'的所有属性的函数。我已阅读“How to quickly clear a Javascript Object?”上的帖子,看到有两个答案:(1)创建一个新的'obj'(我不想这样做,因为我的代码是一个运行的高性能程序在移动浏览器中,我想最小化垃圾收集); (2)迭代循环中对象的属性并删除属性。后一种方法在Chrome 12中不起作用。

请考虑以下代码:

var foo = {};
foo['baz'] = 'bar';
console.log("1. foo.baz = " + foo.baz);

delete foo.baz;
console.log("2. foo.baz = " + foo.baz);

foo['baz'] = 'bar';
console.log("3. foo.baz = " + foo.baz);

for (prop in foo)
{
    if (foo.hasOwnProperty(prop))
    {
        console.log("deleting property " + prop);
        delete foo.prop;
    }
}
console.log("4. foo.baz = " + foo.baz);

这会在Chrome 12上的控制台中产生以下结果:

1. foo.baz = bar
2. foo.baz = undefined
3. foo.baz = bar
deleting property baz
4. foo.baz = bar

为什么不在循环中删除foo.baz?

4 个答案:

答案 0 :(得分:8)

您以错误的方式查找key。您需要使用括号表示法

delete foo[ prop ];

但是,您不需要遍历对象中的每个属性。 null对象引用本身就好了。垃圾收集器会照顾你。

foo = null; // done

谈论高绩效,这就是你想要的方式。

答案 1 :(得分:3)

此行delete foo.prop不正确。在这种情况下,foo没有名为prop的属性。使用括号delete foo[prop]

答案 2 :(得分:0)

因为foo.prop从未被定义为删除。你需要删除它:

delete foo[prop];

答案 3 :(得分:0)

请改为尝试:

delete foo[prop];

HTH