我是一名使用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?
答案 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