10 досадных проблем JavaScript

Несмотря на свою популярность JavaScript обладает весьма и весьма досадными проблемами:

Слишком много вложенных фигурных скобок

Бесспорно, передача функции в качестве параметра замечательна. А еще лучше передача функции, содержащей свою собственную функцию, вызывающую параметр. Но рано или поздно вложенность становится безумной. Никому не хватит времени на подсчет всех фигурных и круглых скобок для выяснения того, где чей-то код раскрывается или как чье-то чудесное решение устранило некий изъян JavaScript. Программисты могли бы давать методам имена и передавать их по имени, но так слишком просто. Вместо этого они вкладывают методы друг в друга.

Уха из браузеров

Раньше из-за несовместимости браузеров было куда больше мучений, и ситуация улучшилась. Все же каждый браузер обрабатывает код слегка иначе, и стандарты поддерживаются далеко не полностью. К примеру, пробел интерпретируется по-разному.

Это ставит в тупик программистов и вынуждает их прибегать к библиотекам наподобие jQuery, чтобы заставить код работать везде. Как известно, библиотеки прекрасны, за исключением случаев, когда они неуместны.

DOM живет в параллельном мире

JavaScript был призван упростить работу с веб-страницами, но он выполняется в пространстве, отделенном от самой страницы, порождая ощущение программирования посредством какого-то API. Для выполнения любого действия или отображения эффекта приходится отыскивать некоторый объект DOM. Для удобства была создана и добавлена в библиотеки функция $, но она должна была войти в состав самого языка. DOM не должен пребывать в отдельном мире, потому что каждый браузер обращается с объектами DOM чуть иначе.

Люди уже не программируют на JavaScript

Большая часть кода сильно зависит от jQuery или другой библиотеки в плане поиска объектов и управления списками. Код имеет мало отношения к языку JavaScript, потому что является связанным перечнем библиотечных вызовов. Можно было бы просто изменить название языка на jQuery.

Бесконечная перезагрузка библиотек

Невзирая на все усилия по использованию кэшируемых версий стандартных библиотек, большинство сайтов не поступают так. В результате значительную часть интернет-трафика составляет многократная перезагрузка одних и тех же библиотек JavaScript.

Тупик в плане новых возможностей

Комитеты встречаются, распространяют проекты, ведут обсуждения, но прогресс крайне медленный. Никто не хочет разрушить веб, однако всем нужны новые возможности. Беда в том, что им надо разные возможности. Поэтому все обсуждают, снова и снова. Точная дата выхода новой версии ECMAScript неизвестна до сих пор.

Избыток отличных инструментов для JavaScript

На первый взгляд, есть нечто хорошее в языках CoffeeScript и Dart, компилирующихся в JavaScript. Кому-то понадобился более удобный способ делать нечто особенное, и он придумал быстрый путь достичь этого в рамках существующей инфраструктуры. Не пришлось ждать, когда все согласятся с ним. Это привело к неразберихе, так как все пишут на CoffeeScript и Dart по-разному.

К тому же, компилятор выдает неудобочитаемый javascript, что уничтожает одно из замечательных свойств сети: возможность углубиться в HTML и JavaScript любой страницы, чтобы узнать, что происходит. Но программисты начинают писать более опрятный код.

Ошибки и недоразумения автоматического преобразования типов

Приятно, что язык автоматически преобразует строки в целые числа, но не тогда, когда это меньше всего ожидается. Еще хуже то, что знак плюса обозначает суммирование и конкатенцию, поэтому результат операции является делом случая. Если переменной x присвоена строка 1, то x+1 превратится в 11, а x-1 даст 0.

Путаница значений

Какая разница между false, null, NaN и undefined? Все они отчасти похожи; некоторые из них даже равны друг другу. isNaN(undefined) истинно, но undefined==NaN ложно. Это обретает смысл, если потратить несколько часов на изучение математических принципов. Однако данные значения не упрощают написание кода.

Ошибочное сходство с Java

Как ни странно, люди до сих пор путают JavaScript с Java, потому что кто-то решил перенести часть популярности Java на совершенно иной язык. Часто забывают, что он называется ECMAScript. Кое-кто не в состоянии запомнить, что Java работает на сервере, чтобы передавать разметку браузеру, не считая того, что он порой работает сообща с JavaScript, выполняющимся в браузере. Недавний выход серверного javascript лишь усугубляет путаницу.