JavaScript for..in语句在IE8中给出了意想不到的结果

时间:2014-12-09 09:25:15

标签: javascript internet-explorer-8

我有一个对象可以转换为C#中的一个字典,我试图遍历所有的"键"这样我就可以按顺序绘制我的对象了。

让我们说这个词典包含三个带有键1,2和3的对象。

for (var key in myDictionary) {
    if (key === "indexOf" || key === "length")
        continue;
    // Do stuff...
}

现在,在IE9 +,Chrome和Firefox中,输出将为1,2,3,而在IE8中,输出为2,1,3。 因为对我的应用程序来说,按顺序给出这些对象是至关重要的,你可以理解这是不需要的行为。

因此,我的问题是: 为什么会发生这种情况,是否有一个已知的解决方法可以解决我的问题?

1 个答案:

答案 0 :(得分:2)

这是因为对象中的属性没有任何特定顺序。获得这些属性的顺序取决于实现,即属性如何存储在对象内部。

以不同于预期的顺序返回属性的浏览器并没有做错任何事情,实际的错误是期望任何特定的顺序。

如果您希望按特定顺序排列属性,则需要对它们进行排序。您可以将它们放在一个数组中,对数组进行排序,然后遍历数组。