【发布时间】:2023-03-26 10:35:01
【问题描述】:
我注意到当比较函数返回0 时,IE9 的排序顺序正在改变元素的顺序。
见:
var myarray=[
{id:1,val:0},
{id:2,val:0},
{id:3,val:7},
{id:4,val:41}
];
myarray.sort(function(a,b){return a.val - b.val});
for(var i in myarray)
{
console.log(myarray[i].id);
}
Chrome、Firefox、Opera 和 Safari 的当前稳定版本得到以下输出:1 2 3 4。
IE7 和 IE8 的输出相同。
IE9 输出为:2 1 3 4
为什么?这正常吗?
【问题讨论】:
-
您使用的是哪个版本的 IE9?可能是较新的测试版已经改变了这种行为。
-
在
0的情况下,只需将其按值排序为primary,并按id排序即可。 -
您确定是
sort而不是for-in?for-in不保证任何特定的顺序,因此不应将其用于数组。 -
@Tom Tu:不正确。在javascript中,数组是一种对象。因此,使用
for-in时的顺序规则对于数组和普通对象是相同的。也就是说,没有规则。它完全依赖于实现。 -
...来自 ECMAScript 5,第 12.6.4 节,for-in 语句 “枚举属性的机制和顺序(步骤 6.a 在第一个算法,第二个中的步骤 7.a)没有指定。”
标签: javascript sorting internet-explorer-9