JavaScript:删除关联数组的所有对象元素

10
我想知道清空关联数组并避免任何内存泄漏(值为js对象)的最有效方法。
为了确保,我尝试迭代数组元素,调用每个元素对象的“删除”操作,以便所有元素对象都将成为垃圾收集的候选对象。最后,使用以下代码重置关联数组: somearray = {}; 是否需要对每个元素调用“删除”操作?或者只需重置变量值即可使所有元素被垃圾收集?
谢谢!
2个回答

6
只要你的对象和关联数组没有被其他地方引用,重置数组就可以了。在IE6上,仅在DOM元素上调用delete是必要的。请参见这里

1
嗨,感谢您的回复。但是,我想进一步澄清我的疑虑。我有一个关联数组,用于存储GMarker对象。在将每个GMarker对象添加到数组中之后,还会使用GMap2.addOverlay()方法将其添加到地图上。当我想要从地图中删除所有标记时,只需调用GMap2.clearOverlays()方法即可。但除此之外,我还必须清除关联数组。这是否意味着当我重置变量时,所有包含的对象最终都将被垃圾收集?提前致谢 - Erwin
是的,它们会。一般来说,找出最佳方法的方式是在循环中运行您的逻辑一百万次,并查看任务管理器中的内存使用情况。 - SLaks
我也在想同样的问题。谁踩了这个答案?事实上,我尝试添加1分,但那时候我收到了“您的声望低于15点”的警告信息。 - Erwin

2

somearray.length = 0 应该有效。


我怀疑尽管这将使数组在几乎所有意义上表现为空,但仍然会有数字键挂在数组对象上,这将防止它们在数组仍被引用(且新对象未被推入其中)时被收集。虽然如此,这是一种有用的技术,可以“清除”你知道不会长时间存在的数组。 - mjh
1
关联数组没有 length 属性! - Flot2011
尝试重新创建它:somearray = new Array(); - Kld
这不会创建一个对象(关联数组),而是创建一个常规数组吗? - rakslice

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