2010-01-04 61 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

相關問題