Субъективный JavaScript
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
assets
content
.gitignore
README.md
dummy.js
motivation.md
translations.md

README.md

Субъективный JavaScript

Остросюжетный гайд. Ускоренное изучение JavaScript как второго (третьего...) языка.

Under development...

От автора

Данная книга предназначена для самостоятельного изучения JS на базе имеющихся знаний Computer Science и опыта программирования на других языках. Она не предназначена для обучения программированию с нуля.

Фундаментальные концепции Булевской алгебры, Условий, Циклов и т.д. в тексте не поясняются. Они повторяются от языка к языку и их знание принимается как базовое допущение.

Основной акцент сделан на особенности JS, неочевидные и малоочевидные вещи, а также продвинутые области, которым в других учебниках уделяется минимум места. Название книги, в том числе, даёт автору право затронуть спорные (и потому наиболее интересные) темы. Которые обычно – "политкорректно" – оставляются на "усмотрение читателя".

Автор текста имеет опыт коммерческого программирования на трёх языках, некоммерческого – на 15+ (не считая CSS, HTML, SQL...).

Основная идея гайда – изучение по аналогии – дополняется взглядом на язык с разных ракурсов: парадигм, истории, конкуренции, контр-примеров и поиска истины.

Мотивация

Переводы терминов

Вступление

JS часто воспринимается как простой язык и учится как набор трюков, заменяющих реальное знание. – Я знаю JS! – утверждает персонаж, использующий alert для отладки... Несложно встретить и противоположный взгляд, по которому JS – это полностью сломанный язык, непроходимая PITA. Мнение подкрепляется специально отобранными "ужасающими" примерами (не встречающимися на практике).

Оба мнения расходятся с реальностью. JavaScript (в редакции ES 2016-2017) – это сравнительно сложный язык, обладающий огромной грамматикой. Выразительные возможности JavaScript находятся на одном уровне с Python и Ruby.

JavaScript сложно выучить на однообразных задачах, возникающих в коммерческих проектах. В то же время, значительный процент "знаний" составляют deprecated синтаксические единицы и паттерны. В повседневной практике, следует ограничивать себя отобранным подмножеством языка.

Официальное название спецификации JavaScript: EcmaScript. Разница связана с лицензиями и не представляет особого интереса. Мы будем использовать термин JS или JavaScript в качестве названия языка и ES5, ES6, ES2015, ES2016 для ссылок на конкретные версии.

Все версии языка, на данный момент, обладают 100% обратной совместимости. Ни авторы ES, ни сообщество пока не смогли выработать удовлетворительного механизма удаления фич. Небольшие исключения типа "use strict" можно вынести за скобки.

Ситуацию спасает отсутствие стандартных библиотек в языке. Да – это огромный плюс! Python сообщество показало всем убедительный контр-пример. "Batteries included", сначала, кажется хорошей идеей. Затем, из-за увязки обновления библиотек с выпуском новых версий языка, – превращает базовый репозиторий в археологический музей. Стандартные пакеты Python устарели и разлагаются. Но, вопреки всеобщей ненависти, продолжают использоваться, как "стандартные"...

JS, безусловно, страдает от противоположной крайности, однако появление NodeJS и NPM в корне изменило ситуацию. Проблем с поиском библиотек в самой большой экосистеме в мире возникнуть не должно. Вероятно, даже число научных библиотек в JS уже превысило таковое в Python.

Проблема с "избытком альтернатив" является меньшим злом. Конкуренция – двигатель прогресса, а культура написания документации в JS сообществе находится на сравнительно высоком уровне Достаточно сказать, что на титульных страницах документаций нередко можно встретить перечень отличий от "конкурентов". О таком уровне большинство программистских сообществ могут лишь мечтать. Возьмите PHP с его бесчисленными "фреймворками", отличающимися друг от друга только названиями. Вспомните выдохшийся Java, где одно упоминание альтернатив считалось личным оскоблением. Или тот же Python с его культом "лидеров"...

Как читать эту книгу

Данная книга посвящёна JavaScript и не затрагивает вопросы API (DOM, HTTP, и т.д.). Однако, примеры кода будут содержать console.log, который не является частью языка. Впрочем, и NodeJS и Браузеры предоставляют данную функцию и, вероятно, её стандартизация – вопрос времени.

Также, при необходимости показать функцию из сторонней библиотеки, мы будем использовать синтаксис CommonJS. Имплементация ES модулей в NodeJS ожидается весной 2017, после чего материал будет обновлён.

Желающим запускать примеры предлагается:

  • установить NodeJS (и редактор – если вы форматировали диск)
  • копировать тексты примеров в отдельные файлы
  • запускать файлы из консоли командой вида $ node exampleX.js

Для простейших примеров можно ограничиться Node REPL ($ node).

Автор книги стремится сделать ВСЕ примеры максимально простыми и понятными с первого взгляда. Если вы испытываете сложность с пониманием какого-либо абзаца или примера при последовательном чтении – открывайте соответствующий тред.

Чтение гайда рекомендуется выполнить дважды. Первый раз – пропуская ссылки на доп. ресурсы в пользу скорейшего прохождения. Второй раз – переходя по ним (... по интересующим лично вас).

Содержание

1. Введение

1.1 Пятиминутный обзор

1.2 Сущности первого класса

1.3 Синтаксические единицы

2. Примитивы

2.1 Зарезервированные слова

2.2 Значения

2.3 Переменные

2.4 Ссылки

2.5 Инструкции

3. Система типов

3.1 Слабая динамическая типизация

3.2 Типы и Прототипы

3.3 Проверка типов

3.4 Коэрция

3.5 Приведение типов

3.6 Боксирование

3.7 Сравнение значений

3.8 Практические правила

4. Builtins

4.1 Нулы

4.2 Булеаны

4.3 Числа

4.4 Строки

4.5 Массивы

4.6 Записи

4.7 Словари

4.8 Множества

4.9 Дата и время

4.10 Регулярки

4.11 Функции

5. Видимость переменных

Скоупинг, Хойстинг, Замыкания

5. Прототипная модель

Наследование, делегация, классы, ООП, динамический this.

6. Встроенные типы и классы

Встроенные П- и О-типы во втором приближении. Продвинутые темы.

Ресурсы

Рекомендованные ресурсы:

Поддержать проект

Данный проект является некоммерческим. Автор вложил в него более сотни часов свободного времени. Поддержите данный проект, поставив ему ★ и поделившись ссылкой со знакомыми. Для подписки на обновления используйте режим Watch.