Chrome和可能的Opera自动排序对象属性

时间:2011-02-03 12:45:40

标签: javascript

问题是:Chrome会自动对对象的属性进行排序。

如果我有一个像这样的对象:

var obj = {4: "first", 2: "second", 1: "third"};

然后当我做下一个:

for(var i in obj) {
    console.debug(obj[i]);
}

我明白了:

third second first

但期望:

first second third

2 个答案:

答案 0 :(得分:18)

永远不要依赖属性的顺序。它们是无序的,并且没有规范定义应枚举的属性。

Chrome orders properties with numeric keys numerically,而其他浏览器按插入顺序枚举它们。它取决于实现。

答案 1 :(得分:5)

您不应期望for..in循环中的密钥有任何特定顺序。来自the MDC docs

  

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

如果您想使用数字键进行排序,请使用数组。