Javascript中for..in循环的迭代顺序

Eli*_*ght 18 javascript

假设我有一个初始化的Javascript对象

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};
Run Code Online (Sandbox Code Playgroud)

然后我想迭代这些对象的键

for(var letter in letters) {
    // code goes here
}
Run Code Online (Sandbox Code Playgroud)

在Firefox 3和Internet Explorer 8中,对象按照它们在对象声明(q,t,o,b,y等)中列出的顺序进行迭代.

我可以依靠吗?假设在迭代之前我没有以任何方式修改我的对象.它是ECMAScript标准的一部分吗?有谁知道哪些浏览器在声明的顺序中迭代?

Cha*_*ick 13

不,它不能依赖,至少在Firefox中不是:

for ... in循环以任意顺序迭代对象的属性.

  • 您不应该依赖任何浏览器中可重现的顺序.该订单由当前实施提供,但可能随时更改.Mozilla的链接文档确实明确地将该命令称为任意. (4认同)
  • 实际上,在Firefox中,您可以依赖于此,但不能依赖Chrome; 见http://stackoverflow.com/questions/280713/elements-order-for-in-loop-in-javascript (2认同)