Почему 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 я получаю такой результат,

Результаты тестирования Firefox

Но в Chrome, почему я получаю этот результат,

Результаты первого теста Chrome

Но когда я передаю тот же массив с помощью var, я получаю это,

Результаты второго Chrome-теста

Но да, он сортирует массив и перезаписывает переменную, но возвращает несортированную версию массива. Поэтому, когда я передаю массив напрямую без всяких переменных, я не получаю сортировку. Но,

Согласно справочной странице MDN, он не должен возвращать отсортированный массив ??

Почему есть разница?

Примечание: в Примерах Imgs есть два примера, которые я практиковал в call func. И забыл его убрать. Так что просто игнорируйте это. Оба они одинаковы.

Всего 1 ответ


Как указано в комментариях, функция, которую вы предоставляете для сортировки, должна возвращать:

  • Положительное число, если a больше, чем b
  • Отрицательное число, если b больше, чем
  • 0 если они равны

Поэтому простое выражение, которое вы можете вернуть, это a - b вместо a > b (если вы хотите отсортировать по возрастанию):

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


Есть идеи?

10000