错误的排序回调-结果仍然正确

Wrong sort callback - results still correct

本文关键字:结果 排序 回调 错误      更新时间:2023-09-26

众所周知,sort()回调函数应该返回-1、0或1,这取决于其参数的比较方式。尽管如此,我经常看到排序回调以以下方式编写:

someArray.sort(function(a, b) { return a > b })

尽管这显然不符合规范,但由于回调只返回0或1,它似乎仍然产生了正确的结果:

a = []
for(i = 0; i < 1000; i++)
a.push(Math.floor(Math.random() * 1000))
console.log(a.sort(function(a, b) { return a > b }))

有人能举一个例子说明上面的回调函数会导致数组排序错误吗?数组元素不必是数字。

这一切都取决于特定浏览器的排序实现,是否使用小于比较,以及是否将排序函数的返回值自动转换为int。

这在IE9中失败,但在Chrome中有效:

"cadbe".split('').sort(function(a,b) { return a > b });

这适用于IE9和Chrome:

"cadbe".split('').sort();