javascript中的数组排序-比较IE8和Chrome的不同结果
数组(注意项目的顺序): 现在,如果在chrome或IE9上运行,下面的js代码会改变顺序javascript中的数组排序-比较IE8和Chrome的不同结果,javascript,arrays,google-chrome,internet-explorer-8,cross-browser,Javascript,Arrays,Google Chrome,Internet Explorer 8,Cross Browser,数组(注意项目的顺序): 现在,如果在chrome或IE9上运行,下面的js代码会改变顺序 for ( var i in data ) { alert(JSON.stringify(data[i])); } IE8保留原始顺序,而较新的浏览器将顺序更改为1、5、10、15、20 知道为什么会这样吗?在较新的浏览器中是否可以保留原始顺序 非常感谢,卢克你这里没有阵列。它只是一个对象,属性的表示顺序是未定义的 编辑-有趣的事实:该规范指出,如果一个实现决定在中公布某个特定的排序,那么。。。
for ( var i in data ) {
alert(JSON.stringify(data[i]));
}
IE8保留原始顺序,而较新的浏览器将顺序更改为1、5、10、15、20
知道为什么会这样吗?在较新的浏览器中是否可以保留原始顺序
非常感谢,卢克你这里没有阵列。它只是一个对象,属性的表示顺序是未定义的
编辑-有趣的事实:该规范指出,如果一个实现决定在
中公布某个特定的排序,那么。。。在
语句中,则Object.keys()
必须遵守相同的排序规则。然而,不需要这样的规则。该规范没有详细说明实现的“未定义”程度,但对我来说,一个很好的经验法则是,编码顺序可以是主动随机的:-)您拥有的不是数组,而是对象。对象没有任何顺序。浏览器以他们想要的任何顺序返回键
如果需要固定顺序,请将对象放入数组:
{
"objects": [
{
"id": "5",
"Title":"Title A",
"Desc":"Description A"
},
{
"id": "15",
"Title":"Title B",
"Desc":"Description B"
},
{
"id": "10",
"Title":"Title C",
"Desc":"Description C"
},
{
"id": "1",
"Title":"Title D",
"Desc":"Description D"
},
{
"id": "20"
"Title":"Title E",
"Desc":"Description E"
}
}
}
那不是数组。那是一个物体。对象没有顺序。例如+1。我一直希望看到一个证据,证明属性顺序在对象中不被保留。对于那些好奇的人来说,JavaScript对象基本上是作为字典/哈希表实现的。因此,未定义的顺序。
{
"objects": [
{
"id": "5",
"Title":"Title A",
"Desc":"Description A"
},
{
"id": "15",
"Title":"Title B",
"Desc":"Description B"
},
{
"id": "10",
"Title":"Title C",
"Desc":"Description C"
},
{
"id": "1",
"Title":"Title D",
"Desc":"Description D"
},
{
"id": "20"
"Title":"Title E",
"Desc":"Description E"
}
}
}