«Вы всё ещё не знаете JS» — что я узнал о языке который думал что знаю
Читал эту книгу на военных сборах — 50 человек в одном помещении, храп и TikTok вокруг. Не лучшие условия для плотной технической книги. Но кое-что важное всё таки зацепило.
Я пишу на JS уже около трёх лет. Верстаю, пишу логику, делаю своё приложение на React. Казалось бы — язык знакомый. Но эта книга показала что я знал инструмент, но не понимал как он устроен внутри.
Обратная совместимость — почему старый код не ломается
Одна из первых вещей которая меня зацепила — JS обладает обратной совместимостью. Это означает что код написанный сегодня будет работать в браузере через 10 лет. Разработчики могут писать и быть уверены что обновление браузера не сломает их приложение.
Но JS не обладает прямой совместимостью — новый синтаксис старые браузеры не понимают. И вот здесь появляется транспиляция.
Транспилятор — это инструмент который преобразует новый синтаксис JS в эквивалентный старый. Самый популярный — Babel. Я знал что Babel существует и что он нужен, но только сейчас понял зачем именно. Это не магия, это конкретное решение конкретной проблемы совместимости.
JS компилируется — просто не так как вы думаете
Многие считают JS интерпретируемым языком. На самом деле браузер компилирует JS прямо перед выполнением — это называется JIT-компиляция. Просто это происходит так быстро что мы этого не замечаем.
Понимание этого меняет отношение к языку — он не просто «скриптовый», у него есть серьёзная механика под капотом.
Значения, примитивы и объекты
Фундаментальная единица любой программы — значение. В JS значения существуют в двух формах: примитивы и объекты. Примитивы — числа, строки, булевы значения. Объекты — всё остальное, включая массивы и функции.
Да, функции тоже являются значениями. Их можно хранить в переменных, передавать как аргументы, класть в массивы и объекты. Для меня это не было новостью, но книга объяснила это так чётко что наконец улеглось по полочкам.
Про === и строгое равенство
Оператор === принято называть строгой проверкой равенства — проверяет и значение и тип. Но книга уточняет что это не идеально строгая проверка в математическом смысле — есть краевые случаи где поведение неочевидно.
Это не значит что === плохой — просто стоит понимать его ограничения а не слепо доверять.
Зачем читать теорию когда уже пишешь код
Я долго думал что теория это для тех кто только начинает. Практика важнее — пиши код, решай задачи, делай проекты.
Это правда. Но теория объясняет почему вещи работают именно так. Почему существует Babel, почему функции можно передавать как аргументы, почему === иногда ведёт себя неожиданно.
Понимание языка изнутри делает тебя лучше не потому что ты знаешь больше фактов — а потому что ты начинаешь писать осознаннее.
У книги есть продолжения с более глубоким разбором отдельных тем — область видимости, замыкания, прототипы. Планирую читать дальше.