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

时间:2009-06-10 14:48:19

标签: 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};

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

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

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

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

5 个答案:

答案 0 :(得分:13)

不,不能依赖它,至少not in Firefox

  

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

答案 1 :(得分:4)

订单无法保证。有关详细信息,请参阅此SO问题:Iterate over a Javascript associative array in sorted order

答案 2 :(得分:2)

要确保在for-in循环中处理对象属性的特定顺序,您需要为对象定义排序顺序或列表方法。如果在创建对象时定义所有属性,则可以使用属性名称数组,但是如果可以添加或删除属性,则需要使用方法。

如果处理顺序由于某种原因是必要的,则阵列可能是优选的。

答案 3 :(得分:1)

订单在规范中定义为“任意”,所以没有;你不应该依赖明确的命令。

答案 4 :(得分:0)

不,你不应该依赖它。