9

我有一个 javascript 对象数组,每个对象都是用“new”创建的。如果发生错误,我想清除整个数组,以便 JS 引擎对它进行 GC。为此,只需将数组变量设置为“null”就足够了,还是我需要拼接数组中的所有元素并将它们设置为null,然后再将数组变量设置为“null”?

我问的原因是,在 Firefox 中,我在将其分配给 null 之前显示了(console.log)数组,并且显示的对象(通常在我假设甚至稍后的显示中更新)在我检查时仍然显示数组的元素稍后,因此我怀疑这些元素是否真的被释放了。

4

1 回答 1

13

要清除数组,您只需将长度设置为零:

var arr = [1,2,3,4,5];

console.log(arr);
arr.length=0;
console.log(arr);

结果:

[1, 2, 3, 4, 5]
[] 

编辑:刚刚发现这个主题:http ://davidwalsh.name/empty-array

查看评论似乎将变量设置为新数组是最简单的方法:

arr = [];

根据测试结果,内存的 GC 比将长度设置为 0 更快。我想这与触发 GC 的分配有关。

这里对各种方法进行了有趣的性能测试:http: //jsperf.com/array-destroy

于 2013-07-23T09:20:26.717 回答