2009-06-10 77 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循环中处理对象属性的特定顺序,您需要为对象定义排序顺序或列表方法。如果在创建对象时定义了所有属性,则会有一组属性名称,但如果可以添加或删除属性,则需要一种方法。

如果处理顺序由于某种原因而必不可少,则数组可能更可取。