javascript中的数组排序 - 比较IE8和Chrome的不同结果

Luk*_*e G 2 javascript arrays google-chrome cross-browser internet-explorer-8

数组(注意项目顺序):

{
  "5":{
      "Title":"Title A",
      "Desc":"Description A"
  },
  "15":{
      "Title":"Title B",
      "Desc":"Description B"
  },
  "10":{
      "Title":"Title C",
      "Desc":"Description C"
  },
  "1":{
      "Title":"Title D",
      "Desc":"Description D"
  },
  "20":{
      "Title":"Title E",
      "Desc":"Description E"
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果在chrome或IE9上运行,下面的js代码确实会改变顺序.

for ( var i in data ) {
    alert(JSON.stringify(data[i]));
}
Run Code Online (Sandbox Code Playgroud)

IE8保留原始订单,而较新的浏览器将订单更改为1,5,10,15,20.

知道为什么会这样吗?是否可以在较新的浏览器中保留原始订单?

非常感谢,卢克

Poi*_*nty 6

你在那里得到的不是阵列.它只是一个对象,属性的呈现顺序是不确定的.

编辑 - 有趣的事实:规范说如果一个实现决定在for ... in语句中宣传某些特定的排序,那么Object.keys()必须遵守相同的排序规则.但是,不需要这样的规则.规范没有详细说明实现的"未定义"如何,但对我来说,一个好的经验法则就是编码好像订单可能被主动随机化:-)