2013-07-23 91 views
4

我有一个javascript对象的数组,每个对象都是用'new'创建的。如果出现错误,我想清除整个数组,以便它由JS引擎进行GC调用。为此,只需将数组变量设置为'null'就足够了,还是需要将数组中的所有元素拼接起来,并在将数组变量设置为'null'之前将它们设置为null?垃圾收集的Javascript数组删除

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

TIA

回答

5

要清除只需将长度为零的数组:

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'd比长度设置为0更快我可以想象这是与分配做触发GC。

有在这里的各种方法一个有趣的性能测试:http://jsperf.com/array-destroy

+0

这会保证其中的物体的free'ing呢? –

+0

@ source.rar - 我这么认为,只要你不在其他地方引用它们。 – RobH

+0

谢谢。考虑到Chrome和Firefox,将arr设置为null(arr = null)似乎是可接受性能的最佳选择。 –