我是一名使用JavaScript的C/C++/Java程序员.
我正在尝试编写一个删除对象'obj'的所有属性的函数.我已经阅读了关于" 如何快速清除Javascript对象? " 的帖子,并看到有两个答案:(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);
Run Code Online (Sandbox Code Playgroud)
这会在Chrome 12上的控制台中产生以下结果:
1. foo.baz = bar
2. foo.baz = undefined
3. foo.baz = bar
deleting property baz
4. foo.baz = bar
Run Code Online (Sandbox Code Playgroud)
为什么不在循环中删除foo.baz?
你key以错误的方式查找.您需要使用括号表示法:
delete foo[ prop ];
Run Code Online (Sandbox Code Playgroud)
但是,您不需要遍历对象中的每个属性.null对象引用本身就好了.垃圾收集器会照顾你.
foo = null; // done
Run Code Online (Sandbox Code Playgroud)
谈论高性能,这就是你想要的方式.
| 归档时间: |
|
| 查看次数: |
4443 次 |
| 最近记录: |