在使用sort方法时,我可以将return a - b
的return语句替换为return a > b
并获得相同的结果,为什么?
代码如下:
arr.sort(function(a, b){
return a > b;
}
似乎就像
一样arr.sort(function(a, b){
return a - b;
}
答案 0 :(得分:1)
Array.sort()预计会有三种可能的结果:
在您的情况下,第一个示例返回true
或false
,但Array.sort()
需要一个数字,因此它将true / false转换为数字,其中true = 1,false = 0。
无论如何,在ES6中,您的第一个代码段不起作用(现在也可以使用,但可以根据您的问题的评论中给出意想不到的结果),as described here,因为:
当给出a时,调用comparefn(a,b)总是返回相同的值v 特定的值对a和b作为它的两个参数。此外, 类型(v)是数字,而v不是NaN。
您的第一个代码段的返回类型为boolean
。
无论如何,在旧版本的ES中,它的工作原理是因为specifications的 15.4.4.5 章节
对于一组值,函数是一致的比较函数,如果(a)对于任何两个值 (可能是相同的值)被视为有序对,在给定时它总是返回相同的值 一对值作为其两个参数,并且将ToNumber应用于此值的结果不是NaN;
console.log(Number(true))
console.log(Number(false))
答案 1 :(得分:0)
比较两个元素时,排序函数需要低于0,0或大于0的数字。
< 0
- 第一个元素具有优先权
= 0
- 两个元素具有相同的优先级
> 0
- 第二个元素具有优先级
因此a - b
将返回正确的值范围,而a > b
将仅返回0
和1
,导致排序中缺少比较结果,并且可能会对某些数据集产生负面结果