И из-за чего всё напутано?
Если ф-ция сортировки не задана то элементы массива преобразуются в строку и сортируются в порядке их следования в таблице Unicode.
Пиздец.
Нет, пиздец это когда понимаешь что в legacy коде вот на таком построена тонна логики и тебе надо заменить все такие странные вызовы на нормальные либы :)
Но корни пиздеца всё равно в языке. :-)
Ну на самом деле, как по мне, JS самый крутой язык (на уровне с python), позволяющий посать что угодно, быстро менять объекты и функции на лету и иметь огромную управляемость процесса выполнения кода в вебе. И за последние 3 года разработки на нём я наткнулся баги в своем коде из-за похожей херни всего 2 раза. Так что не думаю что это так страшно. Те же указатели на массивы указателей в С++ и метапрограммирование в сях меня куда больше вымораживает.
"на уровне с python"
Который, замечу, не конвертирует типы на ровном месте.
Но да, на фоне других проблем (включая проблемы других языков), пожалуй, мелочи.
Который, замечу, не конвертирует типы на ровном месте.
Но да, на фоне других проблем (включая проблемы других языков), пожалуй, мелочи.
питон даже хуже, особенно в питон не хватает == и ===. и еще коллбэков. много много коллбэков
Метапрограммирование и шаблонная магия - это в сторону как раз-таки С++, а не сей.
А указатели на массивы указателей - ближе как раз-таки к сям. В плюсах есть ссылки, (и умные указатели). Вообще рекомендуется по-минимуму использовать сырые указатели. Хотя правила вывода типо для ссылок, всякие l-, r-, x- итп -value тот еще пиздец. Но он придуман не просто так, чтобы ухудшить жизнь разработчика, а наоборот.
А указатели на массивы указателей - ближе как раз-таки к сям. В плюсах есть ссылки, (и умные указатели). Вообще рекомендуется по-минимуму использовать сырые указатели. Хотя правила вывода типо для ссылок, всякие l-, r-, x- итп -value тот еще пиздец. Но он придуман не просто так, чтобы ухудшить жизнь разработчика, а наоборот.
В JS метод Array.sort() строки сортирует лексикографически, а всё, что не строки - приводит к строкам и сортирует лексикографически (это интуитивно ожидаемая сортировка строк, напр. ["афанасий", "дупло", "дуплоёб", "карасик"]). По этой же причине порядок будет [1, 12, 234, 31, 7]. Это очень тупо и почти никогда не нужно, но это легаси.
Ну вы же понимаете что на одном корабле не может двух капитанов. Всё решит смертельная схватка. Можете начинать
в украинском, беларусском и многих европейских языках приходится сортировать по своему "алфавиту", а не по юникоду: і, ї, є, ґ располагаются после буквы я, как и всякие умляуты...
пробелы
хотя если по-другому задать, то опять напутано выходит..
-7
функция сортирует в алфавитном порядке
[6, -2, 2, -7].sort(function(a,b){return a-b;});
тогда уж
[6, -2, 2, -7].sort((a,b) => a - b);
[6, -2, 2, -7].sort((a,b) => a - b);
ох уж это ваше новомодное хипстерское... А мы все по старинке ;)
"ES2015" - "новомодное"
Добавлю
Из за пробелов js интерпретатор может думать что это строка и сортировать массив чисел как массив строк, всего-то делов
Но ведь господь бог дал нам кавычки. Я непонимать. У меня нежная с++ психика.
Ваш бог был недальновиден и не понимал истинного значения хаоса, пока из глубин бездны не поднялся настоящий повелитель хаоса, лорд JS.
Только безумный бог будет своих детей учить работать в хаосе. Лишь четкая последовательность действий и строгая дисциплина смогут спасти этот мир.
Ничего он не думает, для литералов строк есть свои конструкции, просто по дефолту он приводит содержимое масива к строкам.
вот пробелы тут совершенно не причём. JS интерпретатор считает строками только то, что в кавычках, одинарных кавычках или ещё там одних спецкавычках. А это числа, что легко проверяется функцией typeof: typeof [6, -2, 2, -7][2] => "number"
Чтобы написать коммент, необходимо залогиниться
https://www.destroyallsoftware.com/talks/wat