2013-02-27 88 views
1

JavaScript中的哪個更快:使用整數索引循環訪問數組或通過具有屬性的對象循環訪問?性能差異如果有的話是什麼?循環對象屬性vs數值索引數組

var array = [1, 2, 3]; 
for (var i = 0; i < array.length; i++) { 
} 

相比:

var object = {"1":1, "2":2, "3":3}; 
for (var x in object) { 
} 

盡我的理解JavaScript數組實際上是由一個映射支持,所以我希望雙方以相同的性能。任何信息非常感謝!

編輯:我也許應該澄清,我感興趣的是循環開銷(如果for in就像是更貴),並訪問每個元素(object[x] VS array[i])的查找時間。

+1

jsperf.com是在那裏爲您使用... – Jon 2013-02-27 20:58:52

回答

2

接受的答案使用無效的基準,並且是完全錯誤的。正如評論指出console.log將主宰測試結果,使它們無用。看看這個比較:http://jsperf.com/performance-of-array-vs-object/17

數組迭代比對象迭代快大約48倍。如果事先知道對象的鍵的範圍,它會大大提高,但仍然比數組迭代慢得多。

+0

好點,沒有想到控制檯.log ... upvote! – hereandnow78 2014-11-03 07:59:24

0

我創建了一個jsperf http://jsperf.com/array-vs-object-loop

我認爲額外的財產訪問將需要更多的時間。在Chrome 24中,它並沒有太大區別,在firefox 19中,對象方式需要延長5-10%。

您應該也可以考慮對象/數組的大小。

編輯:忘了那個答案,看看接受的一個!

+0

謝謝!我不知道這個網站創建性能測試。 – tau 2013-02-27 21:06:21

+0

好像你在循環中記錄整個數組,而不是單個條目。這與循環對象不同。 – Jacco 2013-02-27 21:06:42

+0

是的,你說的對,我是我的錯。我修好了它!結果似乎保持不變...(至少對我來說) – hereandnow78 2013-02-28 09:34:17