众所周知,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 }))
任何人都可以提供一个示例,其中上述回调函数会导致数组排序错误吗?数组元素不一定是数字。
答案 0 :(得分:2)
这完全取决于特定浏览器的排序实现,是否使用less-than比较,以及是否将排序函数的返回值自动转换为int。
这在IE9中失败,但适用于Chrome:
"cadbe".split('').sort(function(a,b) { return a > b });
这适用于IE9和Chrome:
"cadbe".split('').sort();