2009-06-10 23 views
18

假設我有一個初始化迭代爲了在Javascript for..in循環的

var letters = {q:0, t:0, o:0, b:0, y:0, n:0, u:0, m:0, p:0, 
       w:0, a:0, d:0, k:0, v:0, c:0, z:0, l:0, j:0, 
       i:0, e:0, g:0, s:0, x:0, r:0, h:0, f:0}; 

,然後我要遍歷這個密鑰的Javascript對象對象

for(var letter in letters) { 
    // code goes here 
} 

在這兩個Firefox 3和Internet Explorer 8中,對象按其在對象聲明(q,t,o,b,y等)中列出的順序進行迭代。

我可以依靠這個嗎?假設我在迭代之前不以任何方式修改我的對象。它是ECMAScript標準的一部分嗎?有誰知道哪些瀏覽器按聲明的順序迭代?

+3

Dup:http://stackoverflow.com/questions/919027/are-object-variables-in-javascript-enumerated-in-the-order-they-were-added and http://stackoverflow.com/questions/280713/elements-order-for-in-loop-in-javascript – 2009-06-10 15:17:57

回答

13

不,它不能在,至少not in Firefox依靠:

一種用於...超過一個對象的以任意的順序的屬性循環迭代。

+2

其實,在Firefox中你可以依賴這個,但不能在Chrome中使用;請參閱http://stackoverflow.com/questions/280713/elements-order-for-in-loop-in-javascript – doekman 2011-04-15 10:31:06

1

訂單在規格中定義爲「任意」,所以沒有;你不應該依賴於明確的順序。

2

要確保在for-in循環中處理對象屬性的特定順序,您需要爲對象定義排序順序或列表方法。如果在創建對象時定義了所有屬性,則會有一組屬性名稱,但如果可以添加或刪除屬性,則需要一種方法。

如果處理順序由於某種原因而必不可少,則數組可能更可取。