首页 > 解决方案 > 为什么 Array.prototype.sort 在 Chrome 中有不同的行为?

问题描述

我试图对数组进行排序,我在Chrome V79中得到了与Firefox Dev Edition V72不同的行为(都在桌面版中)。

这是测试,

console.log([4, 2, 5, 1, 3].sort((a, b) => a>b));
console.log(Array.prototype.sort.call([4, 2, 5, 1, 3], (a, b) => a>b));

在 Firefox Dev 中,我得到了这个结果,

火狐测试结果

但是在 Chrome 中,为什么我会得到这个结果,

第一次 Chrome 测试结果

但是当我用 var 传递相同的数组时,我得到了这个,

第二次 Chrome 测试结果

但是是的,它对数组进行排序并重写变量,但返回数组的未排序版本。所以,当我在没有任何 var 的情况下直接传递数组时,我没有排序。但,

根据MDN 的参考页面,它不应该返回排序后的数组吗?

为什么有区别??

注意:在 Example Imgs 中,有两个我正在练习callfunc 的示例。并忘记删除它。所以,直接忽略吧。他们俩都是一样的。

标签: javascriptarrayssorting

解决方案


正如评论中所指出的,您提供的排序功能应该返回:

  • 如果a大于则为正数b
  • b如果大于则为负数a
  • 0 如果它们相等

因此,您可以返回一个简单的表达式,a - b而不是a > b(如果您想升序排序):

console.log([4, 2, 5, 1, 3].sort((a, b) => a-b));


推荐阅读