cpp

Учебник по Node.js и JavaScript (ECMAScript 6+, ECMA-262, es6+)

JavaScript (точнее ECMAScript) — это язык программирования, изначально созданный, чтобы сделать Web-страницу интерактивной, т. е. реагирующей на действия пользователя. Последовательность инструкций (называемая программой, скриптом или сценарием) выполняется интерпретатором, встроенным в Web-браузер. Иными словами, код программы внедряется в HTML-документ и выполняется на стороне клиента. Для выполнения программы даже не нужно перезагружать Web-страницу. Все программы выполняются в результате возникновения какого-то события. Например, перед отправкой данных формы можно проверить их на допустимые значения и, если значения не соответствуют ожидаемым, запретить отправку данных.

В современном мире роль языка JavaScript значительно расширилась после появления платформы Node.js. Благодаря движку V8, на основе которого работает Node.js, язык JavaScript вышел из песочницы Web-браузера и стал универсальным языком программирования. Иными словами, программа, выполняемая с помощью Node.js, имеет доступ ко всему компьютеру пользователя, точно так же, как и программа на других языках, например, на языке Java. В этом учебнике в формате PDF на русском языке мы рассмотрим создание консольных программ на языке JavaScript (ECMAScript) применительно к платформе Node.js.

Учебник подходит для самостоятельного изучения современного языка JavaScript (ECMAScript 2015, ECMAScript 2017, ECMAScript 2020, ECMA-262, es6+): понятная структура учебника, последовательное рассмотрение возможностей, большое количество примеров, весь необходимый справочный материал.

Прохоренок Н., Дронов В. JavaScript и Node.js для веб-разработчиков

JavaScript и Node.js для веб-разработчиков

Книга рассказывает о языке программирования JavaScript, разработке на нем программ, выполняющихся в среде Node.js, и скриптов для веб-страниц. Описывается сам JavaScript: операторы, переменные, массивы, регулярные выражения, функции, классы, объекты, исключения, итераторы, генераторы и класс Promise. Рассказывается о программных инструментах Node.js: модулях, средствах для работы с файловой системой и программирования веб-серверов. Описываются программные инструменты веб-браузеров: объектная модель документа (DOM), события, холст для программного рисования и технология AJAX (в том числе Fetch API). Наконец, ведется рассказ об инструментальных средствах, применяемых при разработке веб-сайтов (в частности, Webpack).

См. также: "HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера. 5-е изд."
См. также: "Bootstrap и CSS-препроцессор Sass. Самое необходимое"
См. также: Учебник Electron js. Разработка оконных приложений на JavaScript (PDF)
См. также: Учебник по jQuery и AJAX в формате PDF

Оглавление учебника по JavaScript (Node.js)

Глава 1. Редактор Visual Studio Code (VS Code)
Глава 2. Первые шаги
Глава 3. Переменные и типы данных
Глава 4. Операторы и циклы
Глава 5. Числа
Глава 6. Массивы и множества
Глава 7. Строки
Глава 8. Регулярные выражения
Глава 9. Работа с датой и временем
Глава 10. Пользовательские функции
Глава 11. Классы и объекты
Глава 12. Модули
Глава 13. Обработка ошибок
Глава 14. Асинхронность
Глава 15. Класс Buffer: массив байтов
Глава 16. Чтение и запись файлов
Глава 17. Потоки ввода и вывода
Глава 18. Работа с файловой системой
Глава 19. Web-сервер на Node.js
Глава 20. Работа JavaScript в Web-браузере
Глава 21. Объектная модель документа в Web-браузере (DOM)
Глава 22. События
Глава 23. Работа с элементами формы
Глава 24. Canvas API: программируемая графика
Глава 25. AJAX: обмен данными без перезагрузки Web-страницы
Глава 26. Сборка проектов для Web

Глава 1. Редактор Visual Studio Code (VS Code)

1.1. Установка VS Code
1.2. Настройка редактора
1.3. Смена цветовой темы
1.4. Структура окна редактора
    1.4.1. Главное меню
    1.4.2. Боковая панель действий
    1.4.3. Строка состояния
    1.4.4. Нижняя панель
    1.4.5. Палитра команд
1.5. Работа с файлами и каталогами
    1.5.1. Создание и сохранение файла
    1.5.2. Закрытие вкладки с файлом
    1.5.3. Открытие файла на редактирование
    1.5.4. Открытие каталога и работа с ним
1.6. Отображение содержимого нескольких файлов одновременно
1.7. Live Server: автоматическое обновление Web-страницы
1.8. Emmet: ускорение набора HTML-кода
    1.8.1. Вставка структуры HTML-документа
    1.8.2. Вставка HTML-комментария
    1.8.3. Теги из раздела HEAD
    1.8.4. Основные теги из раздела BODY
    1.8.5. Добавление текста
    1.8.6. Добавление параметров тегов
    1.8.7. Формы и элементы управления
    1.8.8. Таблицы
    1.8.9. Списки
    1.8.10. Вставка сразу нескольких тегов
1.9. Emmet: ускорение набора CSS-кода
    1.9.1. Форматирование шрифта
    1.9.2. Форматирование текста
    1.9.3. Отступы
    1.9.4. Рамки
    1.9.5. Фон элемента
    1.9.6. Списки
    1.9.7. Таблицы
    1.9.8. Вид курсора
    1.9.9. Форматирование блоков
    1.9.10. Flex-контейнеры
    1.9.11. CSS Grid
    1.9.12. Многоколоночный текст
    1.9.13. Эффекты
    1.9.14. Анимация с двумя состояниями
    1.9.15. Анимация с несколькими состояниями
    1.9.16. Двумерные трансформации
    1.9.17. Трехмерные трансформации
    1.9.18. Прочие атрибуты и правила
    1.9.19. Ввод числового значения атрибута
    1.9.20. Добавление вендорных префиксов
1.10. Всплывающие подсказки при вводе
1.11. Пользовательские фрагменты кода
    1.11.1. В Emmet
    1.11.2. В редакторе VS Code
1.12. Работа с курсорами и выделениями
1.13. Сворачивание и разворачивание блоков кода
1.14. Изменение регистра символов
1.15. Изменение масштаба
1.16. Полноэкранный режим
1.17. Форматирование кода
1.18. Полезные сторонние расширения

Глава 2. Первые шаги

2.1. Установка Node.js
2.2. Работа с командной строкой
2.3. Первая программа на JavaScript
2.4. Вкладка Терминал в редакторе VS Code
2.5. NPM (Node Package Manager)
    2.5.1. Создание пакета и добавление файла package.json
    2.5.2. Установка пакетов
    2.5.3. Обновление и удаление пакетов
    2.5.4. Добавление и запуск скриптов
2.6. Структура программы
2.7. Комментарии в JavaScript
2.8. Интерактивный режим
2.9. Вывод результатов работы программы
2.10. Получение данных из командной строки
2.11. Преждевременное завершение выполнения программы
2.12. Получение версии Node.js

Глава 3. Переменные и типы данных в JavaScript (ECMAScript)

3.1. Именование переменных
3.2. Объявление переменной
3.3. Инициализация переменной и присваивание значения
3.4. Ключевые слова var и let
3.5. Типы данных в языке JavaScript
3.6. Проверка существования переменной
3.7. Преобразование типов данных
3.8. Классы-обертки над элементарными типами
3.9. Константы
3.10. Области видимости переменных
3.11. Вывод значений переменных

Глава 4. Операторы и циклы в JavaScript (ECMAScript)

4.1. Математические операторы
4.2. Побитовые операторы
4.3. Операторы присваивания
4.4. Оператор запятая
4.5. Операторы сравнения
4.6. Приоритет выполнения операторов
4.7. Оператор ветвления if...else
4.8. Оператор ?:
4.9. Оператор выбора switch
4.10. Цикл for
4.11. Цикл while
4.12. Цикл do...while
4.13. Цикл for...in
4.14. Цикл for...of
4.15. Оператор continue: переход на следующую итерацию цикла
4.16. Оператор break: прерывание цикла

Глава 5. Числа в JavaScript (ECMAScript)

5.1. Указание значений
5.2. Класс Number
5.3. Математические константы
5.4. Основные методы для работы с числами
5.5. Округление чисел
5.6. Тригонометрические функции
5.7. Преобразование строки в число
5.8. Преобразование числа в строку
5.9. Генерация псевдослучайных чисел
5.10. Бесконечность и значение NaN
5.11. Тип данных bigint

Глава 6. Массивы и множества в JavaScript (ECMAScript)

6.1. Инициализация массива
6.2. Получение и изменение элемента массива
6.3. Определение числа элементов массива
6.4. Многомерные массивы
6.5. Создание копии массива
6.6. Объединение массивов
6.7. Перебор элементов массива
6.8. Добавление и удаление элементов массива
6.9. Переворачивание массива
6.10. Сортировка массива
6.11. Получение части массива
6.12. Преобразование массива в строку
6.13. Проверка наличия элемента в массиве
6.14. Фильтрация массива
6.15. Методы, возвращающие итераторы
6.16. Ассоциативные массивы
6.17. Класс Map: словарь
    6.17.1. Создание объекта
    6.17.2. Добавление элементов и изменение значения
    6.17.3. Получение значения по ключу
    6.17.4. Проверка наличия ключа
    6.17.5. Определение числа элементов
    6.17.6. Удаление элементов
    6.17.7. Методы, возвращающие итераторы
    6.17.8. Перебор элементов
6.18. Класс Set: множество
    6.18.1. Создание объекта
    6.18.2. Добавление элементов
    6.18.3. Проверка наличия элемента
    6.18.4. Определение числа элементов
    6.18.5. Удаление элементов
    6.18.6. Методы, возвращающие итераторы
    6.18.7. Перебор элементов
    6.18.8. Преобразование множества в массив
    6.18.9. Операции с двумя множествами

Глава 7. Строки в JavaScript (ECMAScript)

7.1. Инициализация строк
7.2. Специальные символы в строке
7.3. Строки в обратных кавычках (шаблоны строк)
7.4. Неформатированные строки
7.5. Конкатенация строк
7.6. Определение длины строки
7.7. Обращение к отдельному символу в строке
7.8. Изменение регистра символов
7.9. Получение фрагмента строки
7.10. Сравнение строк
7.11. Поиск и замена в строке
7.12. Преобразование строки в массив
7.13. URL-кодирование строк
7.14. Повтор строки
7.15. Выполнение команд, содержащихся в строке

Глава 8. Регулярные выражения в JavaScript (ECMAScript)

8.1. Создание шаблона
8.2. Методы класса String
8.3. Методы класса RegExp
8.4. Свойства класса RegExp
8.5. Синтаксис регулярных выражений
    8.5.1. Экранирование специальных символов
    8.5.2. Метасимволы
    8.5.3. Стандартные классы
    8.5.4. Квантификаторы
    8.5.5. Жадность квантификаторов
    8.5.6. Группы
    8.5.7. Обратные ссылки
    8.5.8. Просмотр вперед

Глава 9. Работа с датой и временем в JavaScript (ECMAScript)

9.1. Получение текущей даты и времени
9.2. Указание произвольных значений даты и времени
9.3. Разбор строки с датой и временем
9.4. Преобразование даты в строку
9.5. Получение и изменение значений компонентов даты и времени
9.6. Форматированный вывод текущей даты и времени
9.7. Таймеры
9.8. Измерение времени выполнения фрагментов кода

Глава 10. Пользовательские функции в JavaScript (ECMAScript)

10.1. Создание функции и ее вызов
10.2. Расположение определений функций
10.3. Вложенные функции
10.4. Замыкание
10.5. Класс Function
10.6. Переменное число параметров в функции
    10.6.1. Объект arguments
    10.6.2. Оператор REST
10.7. Способы передачи параметров в функцию
10.8. Необязательные параметры
10.9. Анонимные функции
10.10. Стрелочные функции (лямбда-выражения)
10.11. Функции-генераторы
10.12. Рекурсия

Глава 11. Классы и объекты в JavaScript (ECMAScript)

11.1. Объекты
    11.1.1. Создание объекта с помощью фигурных скобок
    11.1.2. Свойства объекта
    11.1.3. Распаковка объекта
    11.1.4. Методы объекта
    11.1.5. Указатель this
    11.1.6. Setter и getter
    11.1.7. Свойство __proto__
    11.1.8. Атрибуты свойств и метод Object.create()
    11.1.9. Получение значений атрибутов свойств
    11.1.10. Методы defineProperty() и defineProperties()
    11.1.11. Ограничение доступа к объекту
    11.1.12. Получение списка названий свойств
    11.1.13. Перебор свойств объекта
    11.1.14. Проверка существования свойств и методов
    11.1.15. Свойства с типом Symbol
    11.1.16. Сравнение объектов
    11.1.17. Создание копии объекта
    11.1.18. Объединение объектов
    11.1.19. Удаление свойства
11.2. Создание объекта с помощью класса Object
11.3. Создание класса (старый стиль)
    11.3.1. Функция в качестве конструктора класса
    11.3.2. Прототипы
    11.3.3. Свойство constructor
    11.3.4. Наследование
    11.3.5. Переопределение методов
    11.3.6. Статические свойства и методы
11.4. Создание класса (новый стиль)
    11.4.1. Инструкция class
    11.4.2. Конструктор класса
    11.4.3. Наследование
    11.4.4. Переопределение методов
    11.4.5. Публичные поля
    11.4.6. Приватные поля и методы
    11.4.7. Статические свойства и методы
11.5. Оператор instanceof
11.6. Массивоподобные объекты (псевдомассивы)
11.7. Итераторы
11.8. Пространства имен
11.9. Класс Proxy
    11.9.1. Создание proxy-объекта
    11.9.2. Ограничение доступа к значениям свойств объекта
    11.9.3. Ограничение проверки существования свойства
    11.9.4. Ограничение получения списка свойств и их атрибутов
    11.9.5. Ограничение добавления свойства и изменения атрибутов
    11.9.6. Ограничение удаления свойства
    11.9.7. Ограничение нерасширяемости объекта
    11.9.8. Ограничение доступа к прототипу
    11.9.9. Перехват создания объекта
    11.9.10. Перехват вызова функции
    11.9.11. Отключаемый proxy-объект
11.10. Класс Reflect
11.11. Формат JSON: преобразование объекта в строку и обратно

Глава 12. Модули в JavaScript (ECMAScript)

12.1. Модули CommonJS
    12.1.1. Подключение встроенных модулей
    12.1.2. Получение списка встроенных модулей
    12.1.3. Подключение пользовательских модулей
    12.1.4. Кэширование модулей
    12.1.5. Подключение каталогов и пакетов
    12.1.6. Подключение модулей и пакетов из каталога node_modules
    12.1.7. Переменная окружения NODE_PATH
    12.1.8. Экспорт идентификаторов из модуля
    12.1.9. Объект module
12.2. Модули ECMAScript (ESM)
    12.2.1. Основные отличия модулей ECMAScript от модулей CommonJS
    12.2.2. Подключение встроенных модулей
    12.2.3. Получение списка встроенных модулей
    12.2.4. Подключение пользовательских модулей
    12.2.5. Кэширование модулей
    12.2.6. Подключение модулей и пакетов из каталога node_modules
    12.2.7. Экспорт идентификаторов из модуля
    12.2.8. Экспорт идентификатора по умолчанию
    12.2.9. Промежуточный экспорт
    12.2.10. Динамический импорт
    12.2.11. Подключение модулей CommonJS
    12.2.12. Подключение модуля ECMAScript внутри модуля CommonJS
    12.2.13. Подключение файлов в формате JSON
12.3. Свойства main и exports в файле package.json
12.4. Глобальные переменные для приложения

Глава 13. Обработка ошибок в JavaScript (ECMAScript)

13.1. Типы ошибок
13.2. Инструкция try…catch…finally
13.3. Класс Error: объекты исключения
13.4. Оператор throw: генерация исключений
13.5. Способы поиска ошибок в программе
13.6. Метод assert()
13.7. Отладка программы в редакторе VS Code
13.8. Строгий режим
13.9. Установка и настройка Prettier
13.10. Установка и настройка ESLint

Глава 14. Асинхронность в JavaScript (ECMAScript)

14.1. Объект Promise
    14.1.1. Создание объекта
    14.1.2. Обработка изменения статуса
    14.1.3. Статические методы
14.2. Ключевые слова async и await
14.3. Цикл for await...of
14.4. Асинхронные итераторы
14.5. Обработка событий
    14.5.1. Генерация события
    14.5.2. Назначение обработчиков событий
    14.5.3. Удаление обработчиков событий
    14.5.4. Асинхронная обработка событий

Глава 15. Класс Buffer: массив байтов фиксированного размера

15.1. Создание объекта
15.2. Определение числа элементов массива
15.3. Получение и изменение значения по индексу
15.4. Запись и чтение данных
15.5. Создание копии массива
15.6. Получение части массива
15.7. Объединение массивов
15.8. Изменение порядка следования байтов
15.9. Перебор элементов массива
15.10. Методы, возвращающие итераторы
15.11. Сравнение массивов
15.12. Проверка наличия значения в массиве
15.13. Преобразование массива в строку или в другой объект
15.14. Преобразование кодировок

Глава 16. Чтение и запись файлов в Node.js

16.1. Указание пути к файлу или каталогу
16.2. Модуль path: преобразование пути
16.3. Запись в файл с указанием пути к файлу
16.4. Чтение из файла с указанием пути к файлу
16.5. Открытие и закрытие файла
16.6. Режимы открытия файла
16.7. Запись в файл с указанием дескриптора
16.8. Чтение из файла с указанием дескриптора
16.9. Изменение длины содержимого файла
16.10. Дескрипторы стандартных потоков ввода/вывода

Глава 17. Файловые потоки ввода/вывода в Node.js

17.1. Класс WriteStream: поток вывода в файл
    17.1.1. Создание потока вывода
    17.1.2. Запись данных
    17.1.3. События
17.2. Класс ReadStream: поток ввода из файла
    17.2.1. Создание потока ввода
    17.2.2. Чтение данных
    17.2.3. События
    17.2.4. Метод pipe()
    17.2.5. Чтение файла, сохраненного в русской кодировке
17.3. Перенаправление стандартных потоков ввода/вывода

Глава 18. Работа с файловой системой в Node.js

18.1. Переименование и перемещение файла
18.2. Создание копии файла
18.3. Удаление файла
18.4. Получение информации о файле и каталоге
18.5. Права доступа к файлу и каталогу
18.6. Проверка существования файла и каталога
18.7. Создание каталога
18.8. Создание временного каталога
18.9. Удаление каталога
18.10. Перебор объектов, расположенных в каталоге
18.11. Отслеживание изменения файла или каталога

Глава 19. Web-сервер на Node.js

19.1. Создание и запуск Web-сервера
19.2. Объект запроса
19.3. Объект ответа
19.4. Содержимое файла в качестве ответа сервера
19.5. Nodemon: автоматическая перезагрузка сервера

Глава 20. Работа JavaScript в Web-браузере

20.1. Особенности использования JavaScript в Web-браузере
20.2. Первая программа
20.3. Тег script
20.4. Местоположение программы
20.5. Расположение функций внутри HTML-документа
20.6. Консоль в Web-браузере Firefox
20.7. Встроенные диалоговые окна
    20.7.1. Окно с сообщением и кнопкой OK
    20.7.2. Окно с сообщением и кнопками OK и Отмена
    20.7.3. Окно с полем ввода и кнопками OK и Отмена
20.8. Поиск элементов
20.9. Создание часов на Web-странице
20.10. Отладка программы в Web-браузере Firefox
20.11. JavaScript-библиотеки

Глава 21. Объектная модель документа в Web-браузере (DOM)

21.1. Структура объектной модели
21.2. Объект window
21.3. Работа с фреймами
21.4. Объект navigator: получение информации о Web-браузере
21.5. Объект screen: получение информации о мониторе пользователя
21.6. Объект location: разбор составляющих URL-адреса документа
21.7. Объект history: получение информации о просмотренных страницах
21.8. Объект document: получение полной информации о HTML-документе
21.9. Узлы документа
21.10. Общие свойства и методы элементов Web-страницы
21.11. Работа с таблицами стилей при помощи JavaScript
21.12. Объект selection: проверка наличия выделенного фрагмента
21.13. Объект Range: расширение или сжатие выделенного фрагмента текста
21.14. Cookies: сохранение данных на компьютере клиента
21.15. Хранилище
    21.15.1. Сессионное и локальное хранилища
    21.15.2. Работа с хранилищем
    21.15.3. Использование локального хранилища для временного хранения данных
21.16. Работа с графическими изображениями
21.17. Работа с мультимедиа
    21.17.1. Свойства аудио- и видеороликов
    21.17.2. Методы аудио- и видеороликов
    21.17.3. События аудио- и видеороликов
21.18. Средства геолокации
    21.18.1. Доступ к средствам геолокации
    21.18.2. Получение данных геолокации
    21.18.3. Обработка нештатных ситуаций
    21.18.4. Задание дополнительных параметров
    21.18.5. Отслеживание местоположения компьютера

Глава 22. События

22.1. Назначение обработчиков событий
22.2. Удаление обработчиков
22.3. Указатель this
22.4. Объект event
22.5. Действия по умолчанию и их отмена
22.6. Всплывание событий
22.7. Фазы событий
22.8. События документа
22.9. События мыши
22.10. События клавиатуры
22.11. События формы

Глава 23. Работа с элементами формы

23.1. Элементы управления
23.2. Коллекция forms. Доступ к элементу формы из скрипта
23.3. Свойства объекта формы
23.4. Методы объекта формы
23.5. События объекта формы
23.6. Текстовое поле и поле ввода пароля
23.7. Поле для ввода многострочного текста
23.8. Список с возможными значениями
23.9. Флажок и переключатели
23.10. Кнопки. Обработка нажатия кнопки
23.11. Работа с элементами управления
23.12. Расширенная проверка значения, занесенного в поле ввода

Глава 24. Canvas API: программируемая графика

24.1. Тег canvas
24.2. Создание контекста рисования
24.3. Изменение характеристик заливки
24.4. Изменение характеристик обводки
24.5. Рисование прямоугольников
24.6. Очистка прямоугольной области или всего холста
24.7. Вывод текста
24.8. Вывод изображения
24.9. Рисование траектории
24.10. Определение вхождения точки в состав контура
24.11. Использование сложных цветов
    24.11.1. Линейный градиент
    24.11.2. Радиальный градиент
    24.11.3. Заливка текстурой
24.12. Сохранение и восстановление состояния
24.13. Трансформации
24.14. Управление наложением графики
24.15. Задание уровня прозрачности
24.16. Создание тени
24.17. Работа с отдельными пикселами
    24.17.1. Получение массива пикселов
    24.17.2. Создание пустого массива пикселов
    24.17.3. Манипуляция пикселами
    24.17.4. Вывод массива пикселов

Глава 25. AJAX: обмен данными без перезагрузки Web-страницы

25.1. Основы технологии AJAX
    25.1.1. Обмен данными с помощью тега iframe
    25.1.2. Объект XMLHttpRequest
        Методы
        Свойства
    25.1.3. Получение данных в текстовом формате
    25.1.4. Получение данных в формате XML
    25.1.5. Получение данных в формате JSON
25.2. Fetch API
    25.2.1. Функция fetch()
    25.2.2. Классы URL и URLSearchParams
    25.2.3. Объект запроса Request
    25.2.4. Отправка данных при выгрузке страницы
    25.2.5. Прерывание запроса
    25.2.6. Класс FormData
    25.2.7. Загрузка файла на сервер
    25.2.8. Объект ответа Response
    25.2.9. Класс Headers
    25.2.10. Кроссдоменные запросы

Глава 26. Сборка проектов для Web

26.1. Файл .browserslistrc
26.2. Сборка CSS- и SCSS-файлов
    26.2.1. Добавление вендорных префиксов
    26.2.2. Сжатие CSS-файлов
    26.2.3. CSS-препроцессор node-sass
26.3. Пакет npm-run-all: запуск нескольких скриптов
26.4. Система сборки Webpack
    26.4.1. Создание файла конфигурации
    26.4.2. Сборка JavaScript-файлов
    26.4.3. Несколько точек входа
    26.4.4. Автоматическое подключение скриптов в HTML-файле
    26.4.5. Очистка содержимого каталога
    26.4.6. Подключение файлов в формате JSON
    26.4.7. Подключение библиотек из каталога node_modules
    26.4.8. Пакет babel-loader
    26.4.9. Сборка SCSS-файлов
    26.4.10. Подключение изображений
    26.4.11. Перенос файлов