2010-01-04 59 views
10

我想知道清空关联数组,而不会造成任何内存泄漏(该值是JS对象)的javascript:删除关联数组的所有对象元素

只是可以肯定,我的最有效的方法尝试迭代数组的元素,为每个元素对象调用'delete'操作,以便所有元素对象都成为垃圾收集的候选对象。最后,我使用以下命令重置关联数组: somearray = {};

是否需要为每个元素调用“删除”操作?或者重置变量值是否足够,以便所有元素都将被垃圾收集?

谢谢!

回答

7

只要您的对象和关联数组都不在其他地方被引用,重置数组就应该这样做。

在每个对象上调用delete仅在DOM元素上的IE6中是必需的。见here

+1

嗨,谢谢你的回复。不过,我想进一步澄清我的担忧。 我有一个用于存储GMarker对象的关联数组。在将每个GMarker对象添加到数组后,它也会添加到地图中(使用GMap2.addOverlay()方法) 当我想从地图中删除所有标记时,我只需要调用GMap2.clearOverlays()方法。但除此之外,我还必须清除关联数组。 这是否意味着当我重置变量时,所有包含的对象最终都会被垃圾回收? 在此先感谢 – Erwin 2010-01-04 14:35:54

+0

是的,他们会。一般来说,找出最佳方法是在循环中运行一百万次逻辑,并在任务管理器中循环使用内存。 – SLaks 2010-01-04 14:42:40

+0

我明白了。那么我会尝试一下。谢谢您的帮助! – Erwin 2010-01-04 14:58:07

3

somearray.length = 0应该工作。

+0

我怀疑,虽然这会使数组_behave_就像几乎所有的意图和目的都是空的,但仍然会有数字键挂在数组对象上,这将阻止在数组仍然被引用时收集它们(以及新对象没有被推入它)。然而,这是一种有用的技术,用于“清除”一个你知道不会持续很久的数组。 – mjh 2013-03-29 00:57:51

+1

关联数组不具备长度属性! – Flot2011 2013-04-06 15:16:06

+0

尝试再次创建它somearray = new Array(); – Kld 2013-04-06 21:31:45

相关问题