什么是在JavaScript中清空普通对象的最有效方法?

11

这里所述,似乎在JavaScript中清空现有数组(而不是分配一个新的数组)的最有效方法是使用:

array.length = 0;

同样的操作对于普通对象是否有效?(也称为“关联数组”或“字典”) 如果不行,清空现有javascript对象的最有效方法是什么?

我认为分配一个新对象并不是最好的选择,因为它会给垃圾收集器带来一些额外的工作,并在堆上分配一些新的内存,但我可能是错的。

我需要一个至少在Chrome和Firefox中使用的解决方案。


看起来 .length = 0 对于关联数组不起作用(http://jsfiddle.net/7XVym/)。 - awbergs
4
JS没有关联数组。你的意思是对象吗? - js-coder
你不能简单地执行 array = null; 吗? - insertusernamehere
1个回答

28
创建一个新对象是最快的方法。反正你最后会回收所有属性。
var foo = {
    a: 5,
    b: 4
};
foo = {};

您也可以遍历属性并逐个删除它们:
for (var prop in foo) {
    if (foo.hasOwnProperty(prop)) {
        delete foo[prop];
    }
}

值得指出的是,在措辞上,JavaScript 有带有属性的对象,而不是关联数组。


10
需要注意的是,foo = {} 会创建一个新的对象并且不会改变原来的对象。当有其他引用指向原来的对象时,这一点就显得很重要了:var foo = {a:5,b:4}; var bar = foo; foo = {}; 最终,bar仍然是 {a:5,b:4},而不是像人们可能期望的那样成为 {} - Ignitor
1
@Ignitor 如何避免这种情况并将更改传播到bar呢? - Dario
1
@Dario 我猜你必须像答案中所述一样使用 delete 逐个删除属性。 - Ignitor
1
是的,我用for循环遍历所有元素并将其删除。 - Dario

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接