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

Seb*_*ien 8 javascript arrays performance dictionary clear

如前所述这里,似乎清空现有阵列(不是分配一个新的)JavaScript中的最有效的方法是使用:

array.length = 0;
Run Code Online (Sandbox Code Playgroud)

相同的操作是否适用于普通对象?(又名"关联数组"或"字典")如果没有,清空现有javascript对象的最有效方法是什么?

我认为分配一个新的不是最好的选择,因为它会将一些额外的工作推送到垃圾收集器,并在堆上分配一些新的内存,但我可能错了.

我需要一个至少适用于Chrome和Firefox的解决方案.

Den*_*nis 24

最简单的方法是创建一个新对象.无论如何,你最终会收集所有属性的垃圾.

var foo = {
    a: 5,
    b: 4
};
foo = {};
Run Code Online (Sandbox Code Playgroud)

您还可以迭代属性并单独删除它们:

for (var prop in foo) {
    if (foo.hasOwnProperty(prop)) {
        delete foo[prop];
    }
}
Run Code Online (Sandbox Code Playgroud)

另外值得指出的是,作为空话的问题,即JavaScript有对象性质,而不是关联数组.

  • 应该注意的是,`foo = {}`创建一个新对象,**保留原始对象**.当存在对原始对象的其他引用时,这会有所不同:`var foo = {a:5,b:4}; var bar = foo; foo = {};`最后,`bar`仍然是`{a:5,b4}`和****{} {}`正如人们所期望的那样. (7认同)