Объясните мимокрокодилу, что не так с Javascript?
Им не умеют пользоваться и суют везде
Вообще он шикарен. Но есть пара совсем неочевидных нюансов
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ].sort() == [ 1, 10, 2, 3, 4, 5, 6, 7, 8, 9 ]
Ну и ещё тот факт, что даже плохие решения, которые там есть уже нельзя поменять - ибо версионности тоже нету и интернет поломается
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ].sort() == [ 1, 10, 2, 3, 4, 5, 6, 7, 8, 9 ]
Ну и ещё тот факт, что даже плохие решения, которые там есть уже нельзя поменять - ибо версионности тоже нету и интернет поломается
Вот еще интересный момент. В хроме появился Array.prototype.flatMap. Почему не flatten? Потому что когда-то древний пакет уже заиспользовал это имя и наличие Array.prototype.flatten поломает эти сайты. Это сраный 1% интернета, но это все равно много. Вот чуть больше инфы про это (нашел только на английском):
Интернет не поломается, он будет жить свободно и лучше, раньше же как то жили без сраного джаваскрипта.
Из всего wtf ты привел лексикографическую сортировку по умолчанию, серьезно?
Если уж хочется увидеть боль, то:
NaN !== NaN
typeof NaN === 'number'
и еще кучу 'плохих решений', которые никак нельзя разумно обяснить, но и убрать нельзя
а еще та дичь, что в пакетах творится
вот например пакет https://www.npmjs.com/package/isarray
у него 18 млн скачиваний
а что он делает? может у него какая-то сложная логика? да нет, 3 строчки кода:
https://github.com/juliangruber/isarray/blob/master/index.js
Если уж хочется увидеть боль, то:
NaN !== NaN
typeof NaN === 'number'
и еще кучу 'плохих решений', которые никак нельзя разумно обяснить, но и убрать нельзя
а еще та дичь, что в пакетах творится
вот например пакет https://www.npmjs.com/package/isarray
у него 18 млн скачиваний
а что он делает? может у него какая-то сложная логика? да нет, 3 строчки кода:
https://github.com/juliangruber/isarray/blob/master/index.js
NaN !== NaN везде, если не ошибаюсь, не только в JS. Еще есть наличие отрицательного нуля, который неотличим от положительного нуля никак, кроме одного единственного действия.
Мой список:
- есть глобальный объект, но нет синтаксиса его получить,
- двойной null (null и undefined),
- null – ключевое слово, а undefined – глобальная переменная,
- объектная обертка вокруг строки почти неотличима от обычной строки кроме одного единственного случая "if (s)", где s – пустая строка/объектная обертка.
Мой список:
- есть глобальный объект, но нет синтаксиса его получить,
- двойной null (null и undefined),
- null – ключевое слово, а undefined – глобальная переменная,
- объектная обертка вокруг строки почти неотличима от обычной строки кроме одного единственного случая "if (s)", где s – пустая строка/объектная обертка.
Поэтому нужно сортировать пузырьком!
Предполагаю, это из-за того, что JS отличается от других языков. Нет типизации, нет нормальных классов, свои приколы с математическими операциями и равенствами, и прочие тонкости. В итоге другие программисты смотрят на него под разными углами. Кто-то явно называет хреновым, а кто-то просто вежливо указывает на недостатки. В какой цвет его окрашивать, это уже личное дело. Я сам на JS пишу по работе и не скажу, что он плох, хотя признаюсь, что TypeScript мне нравится больше.
> Предполагаю, это из-за того, что JS отличается от других языков.
На самом деле все языки отличаются друг от друга. Некоторые - очень сильно. Наиболее ярко выделяются - Brainfuck, Perl, Lisp, Haskell.
> Нет типизации
Есть - утиная. Кстати, многие популярные языки используют утиную типизацию.
> нет нормальных классов
ООП везде разное. Кому-то и прототипное нравится.
> свои приколы с математическими операциями
IEEE 754 почти во всех языках реализовано так же.
На самом деле все языки отличаются друг от друга. Некоторые - очень сильно. Наиболее ярко выделяются - Brainfuck, Perl, Lisp, Haskell.
> Нет типизации
Есть - утиная. Кстати, многие популярные языки используют утиную типизацию.
> нет нормальных классов
ООП везде разное. Кому-то и прототипное нравится.
> свои приколы с математическими операциями
IEEE 754 почти во всех языках реализовано так же.
/s
Он просто плохой язык на котором никто не хочет писать и все компании мира стараются делать продукты без его поддержки.
Люди бы и рады от него избавится, но все еще есть идиоты, использующие его. Но он уже сдает позиции - уже шестой год он опускается все ниже и ниже на своем первом месте, как самой используемой технологии в IT - https://insights.stackoverflow.com/survey/2018/#most-popular-technologies
Он просто плохой язык на котором никто не хочет писать и все компании мира стараются делать продукты без его поддержки.
Люди бы и рады от него избавится, но все еще есть идиоты, использующие его. Но он уже сдает позиции - уже шестой год он опускается все ниже и ниже на своем первом месте, как самой используемой технологии в IT - https://insights.stackoverflow.com/survey/2018/#most-popular-technologies
Так то JS, к сожалению, глубоко засел в Web'e, что не скоро будет изгнан. Да, есть всякие TypeScript'ы и т п языки, но все они компилируются в JS. Если бы в 90-ых JavaScript'у кто-нибудь составил бы конкуренцию, то веб мог бы выглядеть сейчас иначе.
Лично я жду, движение в строну Web Assembly. Вроде, майки сейчас делают Blazer, который позволит писать на C#. Т.е ты просто пишешь код на C#, он компилируется в байт-код согласно общим стандартам и работает на любом современном браузере.
Лично я жду, движение в строну Web Assembly. Вроде, майки сейчас делают Blazer, который позволит писать на C#. Т.е ты просто пишешь код на C#, он компилируется в байт-код согласно общим стандартам и работает на любом современном браузере.
Я вот только за WebAssembly хотел написать. Хотелось бы, чтобы была более полотная интеграция, и АПИ для работы с DOM.
А то сейчас WebAssembly по своей сути от asm.js ничем не отличается. Да, компилится все не в js, а в свой байткод, но все равно js выступает в роли клея.
Я еще года четыре назад тестил asm.js, охренительная штука. Взять С/С++проект и скомпилить под asm.js вообще без проблем. С OpenGL бывают проблемы, но если проект изночально был под OpenGL ES 2.0 то проблем никаких нету, так как WebGL это js обертка вокруг OpenGL ES 2.0.
Я даже питон компилил, и запускал питоновские скрипты в браузере.
Если с asm.js просадка в производительности по моим ощущениям была где-то раза в 3, 4. То с WebAssembly оно работает почти как нативное, ну может на 30% медленнее. Я считаю это вин.
Так то, сейчас с LLVM инфраструктурой можно хоть на фортране писать под WebAssembly (надо кстати попробовать).
А то сейчас WebAssembly по своей сути от asm.js ничем не отличается. Да, компилится все не в js, а в свой байткод, но все равно js выступает в роли клея.
Я еще года четыре назад тестил asm.js, охренительная штука. Взять С/С++проект и скомпилить под asm.js вообще без проблем. С OpenGL бывают проблемы, но если проект изночально был под OpenGL ES 2.0 то проблем никаких нету, так как WebGL это js обертка вокруг OpenGL ES 2.0.
Я даже питон компилил, и запускал питоновские скрипты в браузере.
Если с asm.js просадка в производительности по моим ощущениям была где-то раза в 3, 4. То с WebAssembly оно работает почти как нативное, ну может на 30% медленнее. Я считаю это вин.
Так то, сейчас с LLVM инфраструктурой можно хоть на фортране писать под WebAssembly (надо кстати попробовать).
Просто выживает сильнейший - JS выжил, на нём много можно реализовать + появились на базе jQerty -> ajax ...
Так же ситуация и с PHP -, да есть perl, python в чём то может превосходящие. Но PHP занял лидерство.
Может изначально бы вместо JS был бы низкоуровнивый ЯП писали бы в asm86... mov ax,4c00h / int 21h и тп потом копилили, не было бы такого кол сайтов, скриптов на любой вкус.
Так же ситуация и с PHP -, да есть perl, python в чём то может превосходящие. Но PHP занял лидерство.
Может изначально бы вместо JS был бы низкоуровнивый ЯП писали бы в asm86... mov ax,4c00h / int 21h и тп потом копилили, не было бы такого кол сайтов, скриптов на любой вкус.
Т.е. ты отключил JS в браузере да?
Люди с объектной ориентацией гонят на то, что она у javascript'а она не развита и не такая, к какой они привыкли. И типизация не строгая. По этому говнокод писать проще. Люди с динамической типизацией гонят на моменты с неявным преобразованием типов. И что говнокод писать проще . И все они еще гонят на то, что в разных браузерах API отличается. И все эти нытики будто бы не знают историю языка и то дерьмо, в котором он вращался и вырос. И вместо того, чтобы учиться на ошибках, они предпочтут высмеять их и убеждать себя, что они то их не совершили бы. У них и node_modules был бы меньше. И говнокод вообще бы никто не писал. Потому что сложно было бы очень.
java там и рядом не было, слово просто понравилось, модное тогда было
Ой, да ладно, не так плох JS. Но замены ему ждать не стоит, слишком много на нем уже работает.
Java + травка = clojure
>...not compilled like Java
Ага, конечно.
В нынешнее время фронт компилируется пострашнее любой жавы.
Ага, конечно.
В нынешнее время фронт компилируется пострашнее любой жавы.
что самое банальное, Java не имеет никакого отношения к Javascript
Java + дурь = groovy
Чтобы написать коммент, необходимо залогиниться