Если compareFunction не предоставляется, элементы сортируются путём конвертации их в строки и сравнения строк в лексикографическом порядке ("словарном порядке" или "порядке телефонной книги", а не в числовом порядке). Например, "80" в словарном порядке идёт перед "9", а в числовом 9 идёт перед 80.
Если параметр compareFunction предоставлен, элементы массива сортируются в соответствии с return-значением сравнивающей функции. Если a и b являются сравниваемыми элементами, то:
Если compareFunction(a, b) меньше 0, b сортируется с меньшим индексом, чем a.
Если compareFunction(a, b) возвращает 0, a и b не изменяют своего положения друг относительно друга, но сортируются относительно всех других элементов.
Если compareFunction(a, b) больше 0, b сортируется с большим индексом, чем a.
Итак, функция сравнения имеет следующую форму:
function compare(a, b) { if (a меньше b по некоторому критерию сортировки) return -1 if (a больше b по некоторому критерию сортировки) return 1 // иначе a обязано быть равно b return 0 }
Для сравнения чисел, а не строк, функция сравнения может просто вычитать b из a:
function compareNumbers(a, b) { return a - b }
JavaScript использует стабильную сортировку: относительное расположение a и b не меняется, если a и b равны. Если до сортировки индекс a был меньше, чем индекс b, он будет меньше и после сортировки вне зависимости от того, как a и b будут перемещены в ходе сортировки.
Поведение метода sort различается в версиях JavaScript 1.1 и JavaScript 1.2.
В JavaScript 1.1, на некоторых платформах, метод sort не работает. Этот метод работает на всех платформах в JavaScript 1.2.
В JavaScript 1.2 этот метод больше не конвертирует undefined-элементы в null; вместо этого он сортирует их в конец массива. Например, у вас имеется такой скрипт:
<SCRIPT> a = new Array(); a[0] = "Ant"; a[5] = "Zebra";
function writeArray(x) { for (i = 0; i < x.length; i++) { document.write(x[i]); if (i < x.length-1) document.write(", "); } }
writeArray(a); a.sort(); document.write("<BR><BR>");
writeArray(a); </SCRIPT>В JavaScript 1.1 будет выведено:
ant, null, null, null, null, zebra ant, null, null, null, null, zebra
В JavaScript 1.2 будет выведено:
ant, undefined, undefined, undefined, undefined, zebra ant, zebra, undefined, undefined, undefined, undefined