cpp

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

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

Это продолжение (расширение) книги "HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера", посвященное JavaScript и Node.js.

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

В книге приведено большое количество примеров исходного кода и листингов готовых программ. Электронный архив на сайте издательства содержит коды всех пронумерованных листингов.

Требования к читателям: знание HTML и CSS в объеме книги "HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера. 5-е изд.".

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

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

Введение
Структура книги
Типографские соглашения

Глава 1. Редактор Visual Studio 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: автоматическое обновление веб-страницы
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. Форматирование кода
1.19. Полезные расширения

Глава 2. Node.js: первые шаги

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. Переменные и типы данных

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. Операторы и циклы

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

Глава 5. Числа

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. Массивы и множества

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. Методы класса Map, возвращающие итераторы
    6.17.8. Перебор элементов словаря
6.18. Класс Set: множество
    6.18.1. Создание объекта
    6.18.2. Добавление элементов
    6.18.3. Проверка наличия элемента
    6.18.4. Определение размера множества
    6.18.5. Удаление элементов
    6.18.6. Методы класса Set, возвращающие итераторы
    6.18.7. Перебор элементов множества
    6.18.8. Преобразование множества в массив
    6.18.9. Операции с двумя множествами

Глава 7. Строки

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. Регулярные выражения

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. Работа с датой и временем

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

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

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. Классы и объекты

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. Пространства имен
11.10. Класс Proxy
    11.10.1. Создание proxy-объекта
    11.10.2. Ограничение доступа к свойствам объекта
    11.10.3. Ограничение проверки существования свойства
    11.10.4. Ограничение получения списка свойств и их атрибутов
    11.10.5. Ограничение добавления свойства и изменения атрибутов
    11.10.6. Ограничение удаления свойства
    11.10.7. Ограничение нерасширяемости объекта
    11.10.8. Ограничение доступа к прототипу
    11.10.9. Перехват создания объекта
    11.10.10. Перехват вызова функции
    11.10.11. Отключаемый proxy-объект
11.11. Класс Reflect
11.12. Формат JSON: преобразование объекта в строку и обратно

Глава 12. Модули

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 и imports в файле package.json
12.4. Переменные уровня приложения

Глава 13. Обработка ошибок

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. Асинхронность

14.1. Объект класса Promise
    14.1.1. Создание объекта класса Promise
    14.1.2. Обработка изменения статуса
    14.1.3. Массовая обработка объектов класса Promise
14.2. Ключевые слова async и await
14.3. Цикл for await...of
14.4. Асинхронные итераторы
14.5. Асинхронные методы-генераторы
14.6. Обработка событий
    14.6.1. Генерирование событий
    14.6.2. Назначение обработчиков событий
    14.6.3. Удаление обработчиков событий
    14.6.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. Чтение и запись файлов

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

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

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. Работа с файловой системой

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

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

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

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

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

Глава 21. Объектная модель документа

21.1. Структура объектной модели документа
21.2. Объект window
21.3. Работа с фреймами
21.4. Объект navigator: получение сведений о веб-браузере
21.5. Объект screen: получение сведений об экране клиентского компьютера
21.6. Объект location: доступ к интернет-адресу веб-страницы
21.7. Объект history: история веб-браузера
21.8. Объект document: работа с веб-страницей
21.9. Узлы DOM
21.10. Общие свойства и методы элементов веб-страницы
21.11. Работа с таблицами стилей
21.12. Объект selection: работа с выделением
21.13. Объект Range: работа с фрагментами текста
21.14. Cookie: хранение данных на компьютере клиента
21.15. Хранилище
    21.15.1. Сессионное и локальное хранилища
    21.15.2. Работа с хранилищем
    21.15.3. Использование локального хранилища для хранения данных
21.16. Работа с графическими изображениями
21.17. Работа с мультимедиа
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.4.1. Текстовые поля, поля ввода пароля, подстроки поиска, адреса электронной почты, интернет-адреса и телефона
    23.4.2. Поле ввода числа и регулятор
    23.4.3. Поля ввода даты и времени
    23.4.4. Поле выбора цвета
    23.4.5. Поле выбора файла
    23.4.6. Область редактирования
    23.4.7. Флажок и переключатель
    23.4.8. Список
    23.4.9. Кнопки
23.5. Расширенная проверка значения, занесенного в поле ввода

Глава 24. Холст: программируемая графика

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: обмен данными без перезагрузки веб-страницы

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. Сборка веб-сайтов

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

Заключение
Приложение. Структура электронного архива