为什么对象会自动重新排序?

时间:2013-10-28 18:20:17

标签: javascript

我创建了一个对象,其中包含点的内容和您将获得的标记

marks: {
                900: 1.0,
                822: 1.1,
                804: 1.2,
                786: 1.3,
                768: 1.4,
                750: 1.5,
                732: 1.6,
                714: 1.7,
                696: 1.8,
                678: 1.9,
                660: 2.0,
                588: 2.4,
                570: 2.5,
                552: 2.6,
                534: 2.7,
                516: 2.8,
                498: 2.9,
                480: 3.0,
                462: 3.1,
                444: 3.2,
                426: 3.3,
                408: 3.4,
                390: 3.5,
                372: 3.6,
                354: 3.7,
                336: 3.8,
                318: 3.9,
                300: 4.0
            },

如果我在控制台中显示对象,则输出将为

对象{300 = 4,318 = 3.9,336 = 3.8,更多......}

您可以在http://jsfiddle.net/Sx4Z2/

上看到它

什么是错的?为什么对象中有订单?

3 个答案:

答案 0 :(得分:4)

如果订单对您很重要,您应该使用数组。您无法信任JavaScript对象中的属性顺序。在你的情况下,我会使用类似的东西:

[
    {key: 900, value: 1.0},
    {key: 822, value: 1.1},
    // ...
]

看看这个问题:Does JavaScript Guarantee Object Property Order?

答案 1 :(得分:2)

ECMA-262未指定对象中键的顺序。但请注意以下事项:

  1. 几乎每个JavaScript引擎都会保留密钥顺序。
  2. ...除非这些键是整数,在这种情况下它们通常不是。
  3. 因此,在您的情况下,如果您在键前面加上一些非alpha字符串,则应该能够提供可预测的行为(尽管不是基于任何标准)。

答案 2 :(得分:2)

它本身不是reorder - JavaScript对象没有指定的顺序。如果您需要订购,请使用数组。