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

Javascript中for..in循环的迭代顺序,javascript,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) { /

假设我有一个已初始化的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
}
在Firefox3和InternetExplorer8中,对象都是按照对象声明中列出的顺序(q、t、o、b、y等)迭代的


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

不保证顺序。有关更多信息,请参阅此SO问题:。

不,您不应该依赖此问题。

不,它不能依赖,至少:

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


该订单在规范中定义为“任意”,因此没有;您不应该依赖于顺序是确定的。

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


如果处理顺序出于某种原因是必要的,则阵列可能更可取

Dup:事实上,在Firefox中你可以依赖它,但在Chrome中不行;请参见,您不应依赖于任何浏览器中的可复制顺序。命令由当前实现给出,但可能随时更改。Mozilla的链接文档确实显式地调用了任意顺序。