Найти в Дзене
CyberEd

Почему все ругают JS, но в тайне обожают?

Оглавление

Рекомендую провести эксперимент. Подойдите к группе программистов и шепотом скажите: «javascript». Разговор тут же перейдет в бурную фазу дебатов, и любая тема, которая обсуждалась ранее, будет напрочь забыта (если конечно они не были заняты забиванием гвоздей в гроб PHP). Почему это тема столь живая? И как у JS получается вызывать столько шума?

Чтобы разобраться в этом, стоит окунуться в историю. JS изначально создавался как скриптовый язык программирования. Где-то в 2004 году на него не было возложено много ответственности. Его обыденными задачами были: красивая замена цветов, обслуживание выпадающих окон и шокирование пользователей магией модальных окон.

Шло время. JS пережил несколько важных преобразований. Теперь JavaScript — полноценный язык программирования и на бэке, и на фронте. Он постепенно захватывает мобильную разработку и уже захватил браузерные игры, 3d графику (Выпьем за flesh, не чокаясь).

Однако архитектура языка, решения и «идея» были заточены под его первоначальные задачи. Таким образом мы получаем интересные особенности (именно особенности, так как сложно назвать это плюсами или минусами). Пройдемся по ним и поймем, как с этим жить.

Неявные преобразования

Под «неявными» в данном контексте стоит понимать преобразования, которые делает сам язык, а не вы. В случае с JS они действительно бывают максимально неявными.

Думаю, что такие примеры, как "5«+4, уже не удивят изысканный вкус читателя. Больше всего в этой особенности js мне нравится (‘b’+’a’+ +’b’).toLowerCase() Крайне рекомендую попробовать.

Как же научиться предугадывать эти неявные преобразования? На самом деле JS пытается сделать минимальное количество преобразований, которые у него с максимальной вероятностью получатся.

Если рассматривать на примере ‘5’+4, то в этом случае может быть либо сложение чисел, либо конкатенация (склеивание) строк. Так как мы можем любое число преобразовать к строке (обратное утверждение ложно), то из этих двух операций выбирается конкатенация, число приводится к строке, и значения склеиваются.

Интересная статейка, рекомендую: 
https://habr.com/ru/company/ruvds/blog/347866/

Объекты в JS

Объекты в JS вовсе объединили в себе две темы: ассоциативный массив и ООП.

Если с ООП всё приблизительно как в других языках, то с ассоциативными массивами бывают сложности. В JS объекты — это и ассоциативный массив, и объект. Мы можем итерироваться по ключу и присваивать методы, которые ссылаются на внутренние свойства. Это слияние приводит к путанице в понимании и так непростой сущности — this. Если изучая, JS вы поняли this, я вас поздравляю! Вы большая умница. :) This определяет контекст выполнения метода. И если в других языках подобие this используется только в классах, то в JS это зло вышло на улицы.

Однопоточность

Внимание! JS — это однопоточный язык! Он не способен на множество действий одновременно. «Минуточку! Я знаю, что в JS есть асинхронные процессы! Как же они работают в однопоточном языке?» — спросите вы. А никак! Асинхронные запросы реализуются на стороне браузера, если это JS на стороне клиента, и в NodeJs, если это сервер. В самом JS нет асинхронности — живите теперь с этим. На практике это обходится, как я уже сказал: либо через браузер, либо через Node.

Отличное видео про асинхронность в JS:
https://www.youtube.com/watch?v=8cV4ZvHXQL4
В редакторе видеозапись не воспроизводится26:34Добавьте описание
В редакторе видеозапись не воспроизводится26:34Добавьте описание

Так почему у некоторых программистов от слов ES6 сердце начинает биться немного чаще?

  • JS — единственный язык, на котором можно сделать все, от слова совсем. Хорошо изучив этот язык, вы можете: написать сайт (полностью), разработать мобильное приложение, игры, написать что-нибудь на десктоп и даже программировать микроконтроллеры. Это тот самый случай, когда выучив один язык, можно легко переходить из одной технологии в другую.
  • У JS пожалуй оно самое разноплановое и обширное комьюнити. Я думаю, вы согласитесь с тем, что язык учить проще, когда в интернете есть тонны литературы и ответов на вопросы. Ещё не было такого случая, когда я не смог найти ответ на свой вопрос по JS в интернете.
  • JS полезен в быту. Нередко я решаю не связанные с работой задачи с помощью JS. Можно легко распарсить нужный материал с сайта, убрать надоедливую рекламу (если кто-то вспомнил Adblock, у меня плохие новости — почитайте про теневой DOM), скачать видео или сделать кино на весь экран. Вроде мелочи, а приятно.

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

Учите JS, друзья, и не пугайтесь его неочевидности!

PS. Воспользуйтесь возможностью получить знания и навыки работы с JS от действующих разработчиков на интенсиве по веб-разработке в HackerU.