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

sta*_*010 5 javascript

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

jAn*_*ndy 8

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

delete foo[ prop ];
Run Code Online (Sandbox Code Playgroud)

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

foo = null; // done
Run Code Online (Sandbox Code Playgroud)

谈论高性能,这就是你想要的方式.