sort
我正在使用此 Javascript 代码查看调用该方法时比较数组元素的顺序。
function log(text)
{
document.documentElement.appendChild(document.createElement('div')).appendChild(document.createTextNode(text));
}
[5, 4, 3, 2, 1].sort(function (a, b) {
log("comparing " + a + " and " + b);
return a - b;
});
看到不同的浏览器由于不同的实现而产生不同的输出,我并不感到惊讶。我无法理解的是为什么 IE 和 Opera 有时会连续两次比较同一对值。这对我来说没有任何意义。排序数组看起来像是一个基本的语言功能,我可能在这里遗漏了一些东西。有人可以解释这种行为吗?
这是我的测试结果:
IE 9 和 10
- 比较 4 和 5
- 比较 4 和 5
- 比较 3 和 5
- 比较 3 和 4
- 比较 2 和 5
- 比较 2 和 4
- 比较 2 和 3
- 比较 1 和 5
- 比较 1 和 3
- 比较 1 和 2
火狐
- 比较 5 和 4
- 比较 5 和 3
- 比较 4 和 3
- 比较 2 和 1
- 比较 5 和 1
- 比较 3 和 1
- 比较 3 和 2
铬合金
- 比较 5 和 4
- 比较 5 和 3
- 比较 4 和 3
- 比较 5 和 2
- 比较 4 和 2
- 比较 3 和 2
- 比较 5 和 1
- 比较 4 和 1
- 比较 3 和 1
- 比较 2 和 1
歌剧
- 比较 5 和 4
- 比较 2 和 1
- 比较 3 和 1
- 比较 3 和 1
- 比较 3 和 2
- 比较 5 和 1
- 比较 4 和 1
- 比较 4 和 2
- 比较 4 和 3
以及概念证明:http: //jsfiddle.net/Sd9ph/