Я уверен, что вы заметили, но «JS» в названии серии книг — это не аббревиатура для слов, используемых для проклятий в адрес JavaScript, хотя проклинание причуд языка — это то, на чём, вероятно, мы все можем поймать себя!
С самых ранних дней Интернета JavaScript был основополагающей технологией, управляющей интерактивным взаимодействием с контентом, который мы потребляем. И хотя мерцающие шлейфы за курсором мыши и раздражающие всплывающие окна — это то, с чего JavaScript начинался, почти 2 десятилетия спустя технология и возможности JavaScript выросли на несколько порядков, и мало кто подвергает сомнению его роль в основе самой широко доступной программной платформы в мире: в вебе.
Но как язык он постоянно был объектом критики, отчасти благодаря своему наследию, но даже в большей степени — из-за философии своего устройства. Даже название напоминает, как сказал однажды Брендан Айк, о статусе «тупого младшего брата», по сравнению с более зрелым старшим братом «Java». Но это название — просто случайность, политический и маркетинговый ход. Эти два языка во многом отличаются друг от друга. «JavaScript» так же связан с «Java», как «вал» с «карнавалом».
Поскольку JavaScript заимствует концепции и синтаксические идиомы из нескольких языков, включая как гордые процедурные корни в стиле C, так и тонкие, менее очевидные функциональные корни в стиле Scheme / Lisp, он чрезвычайно доступен для широкой аудитории разработчиков, даже тех, у кого мало или совсем нет опыта программирования. "Hello World" на JavaScript настолько прост, что язык выглядит привлекательным и доступным на первых порах.
Хотя JavaScript — это, возможно, один из самых простых языков в начале работы с ним, его эксцентричность делает твёрдое владение им гораздо менее обычным явлением, чем во многих других языках. Там, где для написания полноценной программы требуется довольно глубокое знание языка, как в C или C ++, полноценная программа на JavaScript может почти не проникать под поверхность того, на что способен язык.
Сложные концепции, которые глубоко укоренились в языке, стремятся вместо этого выглядеть внешне простыми, как передача функций в качестве обратных вызовов, что побуждает JavaScript-разработчика просто использовать язык как есть и не слишком беспокоиться о том, что происходит под капотом.
Это одновременно и простой, лёгкий в использовании язык, имеющий широкое обращение, и сложный, полный нюансов набор языковых механик, который без тщательного изучения ускользнёт от истинного понимания даже для самых опытных JavaScript-разработчиков.
В этом парадокс JavaScript, ахиллесова пята языка, проблема, к которой мы сейчас обращаемся. Поскольку JavaScript можно использовать без понимания, это понимание зачастую никогда не достигается.
Если каждый раз, когда вы сталкиваетесь с какой-то неожиданностью или разочарованием в JavaScript, ваша реакция — добавить это в чёрный список, как некоторые привыкли делать, то вскоре от всего богатства JavaScript у вас останется только оболочка.
Хотя это подмножество известно под названием «Сильные стороны», умоляю вас, дорогой читатель, вместо этого считать его «Лёгкими сторонами», «Безопасными сторонами» или даже «Неполными сторонами».
Серия Вы не знаете JavaScript предлагает противоположный вызов: учиться и глубоко понимать весь JavaScript, включая (в особенности) «Тяжёлые стороны».
Здесь мы обращаемся к стремлению JS-разработчиков выучить «достаточно», чтобы обходиться этим, даже не заставляя себя в точности выяснить, как и почему язык ведёт себя так, как он это делает. Кроме того, мы избегаем общего совета отдыхать, когда путь становится тяжёлым.
Я недоволен, и вы не должны быть довольны, останавливаясь каждый раз, когда что-то просто работает, без полного понимания, почему. Я вежливо призываю вас отправиться по этой ухабистой непроторенной дороге и охватить всё, чем JavaScript является и на что он способен. С этими знаниями ни одна технология, фреймворк, или другой популярный тренд недели не останется за пределами вашего понимания.
Каждая из этих книг берёт конкретные ключевые части языка, которые чаще всего неправильно понимаются или недооцениваются, и погружается в них глубоко и исчерпывающе. Вам стоит отбросить твёрдую уверенность в своём понимании не только теоретических, но и практических составляющих.
JavaScript, который вы знаете прямо сейчас — вероятно, стороны, переданные вам другими, кто перегорел от неполного понимания. Этот JavaScript — всего лишь тень истинного языка. Вы не знаете JavaScript по-настоящему, пока что, но если вы вникнете в эту серию, вы будете. Продолжайте читать, друзья. JavaScript ждёт вас.
JavaScript потрясающий. Он легко учится частично, и гораздо труднее учится полностью (или хотя бы достаточно). Когда разработчики сталкиваются с затруднениями, они обычно обвиняют язык вместо нехватки собственных знаний о нём. Цель этих книг — исправить это, вдохновляя на высокую оценку языка, который вы можете сейчас и должны глубоко знать.
Примечание. Многие примеры в этой книге предполагают использование современных (и будущих) JavaScript-сред, таких как ES6. Какой-то код может не работать так, как описано, если он запускается на старых (до ES6) платформах.