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

set*_*tty 12 javascript

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

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

var obj = {4: "first", 2: "second", 1: "third"};
Run Code Online (Sandbox Code Playgroud)

然后我下次做的时候:

for(var i in obj) {
    console.debug(obj[i]);
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

third second first

但期望:

first second third

Fel*_*ing 18

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

Chrome使用数字键以数字顺序排序属性,而其他浏览器按插入顺序枚举它们.它取决于实现.


lon*_*day 5

您不应该期望for..in循环中的键的任何特定顺序.来自MDC文档:

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

如果要使用数字键进行排序,请使用数组.