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

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 知道为什么会这样吗?在较新的浏览器中是否可以保留原始顺序 非常感谢,卢克你这里没有阵列。它只是一个对象,属性的表示顺序是未定义的 编辑-有趣的事实:该规范指出,如果一个实现决定在中公布某个特定的排序,那么。。。

数组(注意项目的顺序):

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

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"
        }
    }
}