使用算术运算符与比较运算符对数字数组进行排序

Sort array of numbers with arithmetic operators vs comparison operators

在 Javascript 中有两种解决方案来编写 sort() 函数以按升序对数字数组进行排序。

var numbers = [2, 10, 2, 6, 4];
// first solution
numbers.sort((a, b) => a - b); // [2, 2, 4, 6, 10]

// second solution
numbers.sort((a, b) => a > b); // [2, 2, 4, 6, 10]

哪个更好用或更快?

sort 回调必须 return 值 <0、0 或 >0,不是布尔值。使用 > 只是 不正确 。它将如何影响排序算法的性能或正确性取决于实现(即不同的引擎可能显示不同的结果)。

在 C 语言中,我们总是倾向于 a - b 而不是 a > b,因为后者可能会由于分支预测器的故障而导致管道转储。

不过在 Javascript 中,您不会微优化到那个级别。写最清楚的。更好的是,使用开箱即用的解决方案。

在性能方面,我做了一个jsPerf片段,布尔运算符似乎更快。

PD:使用 Google Chrome 版本 59.0.3071.115(官方构建)(64 位)