3-е изд. — Пер. с англ. Е. Сандицкая. — СПб.: Питер, 2023. — 528 с.: ил. — (Бестселлеры O’Reilly). — ISBN 978-5-4461-2001-7.
Зачем изобретать велосипед, сталкиваясь с очередной проблемой в JavaScript? Здесь вы найдете множество рецептов кода для типовых задач программирования, а также познакомитесь c методами создания приложений, работающих в любом браузере. Адаптируемые примеры кода можно вставить практически в любой проект, а заодно поглубже изучить JS.
С помощью этой книги вы научитесь настраивать эффективную среду разработки с редактором кода, статическим анализатором и тестовым сервером; станете лучше понимать функции JS, включая замыкания и генераторы; узнаете, как использовать классы и наследование — основные концепции ООП; освоите работу с мультимедиа, включая аудио, видео и SVG; научитесь управлять HTML и CSS; благодаря Node.js сможете использовать JavaScript где угодно; узнаете, как получать доступ к удаленным данным и управлять ими с помощью технологий REST, GraphQL и Fetch; освоите популярную среду разработки приложений Express; научитесь выполнять асинхронные операции с промисами, async/await и веб-процессами.
ПредисловиеАудитория этой книги
Структура издания
Условные обозначения
Примеры кода
Благодарности
От издательства
Язык JavaScriptНастройка среды разработкиВыбираем редактор кода
Использование консоли разработки в браузере
Выполнение фрагментов кода в консоли разработчика
Использование строгого режима для выявления типичных ошибок
Вставка блоков HTML с помощью сокращенных команд Emmet
Установка менеджера пакетов npm (с Node.js)
Загрузка пакета с помощью npm
Обновление пакета с помощью npm
Настройка локального тестового сервера
Соблюдение стандартов кодирования с помощью статического анализатора
Согласованное оформление кода с помощью форматировщика
Эксперименты в интерактивной среде JavaScript
Строки и регулярные выраженияПроверка того, что строка существует и она не пустая
Преобразование числового значения в форматированную строку
Вставка специальных символов
Использование эмодзи
Использование шаблонных литералов для более наглядной конкатенации строк
Сравнение строк без учета регистра
Проверка того, содержит ли строка заданную подстроку
Замена всех вхождений строки
Замена тегов HTML на именованные сущности
Использование регулярных выражений для создания шаблонов при замене строк
Извлечение списка из строки
Поиск по шаблону
Удаление пробелов в начале и в конце строки
Замена первой буквы строки на прописную
Валидация адреса электронной почты
ЧислаГенерирование случайных чисел
Генерирование криптографически надежных случайных чисел
Округление до заданного десятичного разряда
Сохранение точности в дробных числах
Преобразование строки в число
Преобразование десятичных значений в шестнадцатеричные
Преобразование градусов в радианы
Вычисление длины дуги окружности
Манипуляции с очень большими целыми числами в формате BigInt
ДатыПолучение текущих даты и времени
Преобразование строки в дату
Добавляем дни к дате
Сравнение дат и проверка двух дат на равенство
Вычисление времени, прошедшего между двумя датами
Представление даты в виде форматированной строки
МассивыПроверка того, является ли объект массивом
Перебор всех элементов массива
Проверка равенства двух массивов
Разбиение массива на отдельные переменные
Передача массива в функцию, которая принимает список значений
Клонирование массива
Слияние двух массивов
Копирование части массива, выбранной по положению элемента
Извлечение из массива элементов, удовлетворяющих заданному условию
Очистка массива
Удаление дубликатов
Сведение двумерного массива
Точный поиск элементов массива
Поиск элементов массива, удовлетворяющих заданному критерию
Удаление и замена элементов массива
Сортировка массива объектов по заданному свойству
Преобразование элементов массива
Использование всех элементов массива в одном вычислении
Проверка содержимого массива
Построение коллекции недублирующихся значений
Создание коллекции элементов, индексированной по ключу
ФункцииПередача одной функции в другую в качестве аргумента
Использование стрелочных функций
Предоставление значения параметра по умолчанию
Создание функции, принимающей неограниченное число аргументов
Использование именованных параметров функции
Создание функции с сохранением состояния посредством замыкания
Создание функции-генератора, которая возвращает несколько значений
Уменьшение избыточности за счет частичного применения
Фиксация this посредством привязки функций
Реализация рекурсивного алгоритма
ОбъектыПроверка того, относится ли объект к заданному типу
Объединение данных с помощью объектных литералов
Проверка существования свойства у объекта
Перебор всех свойств объекта
Проверка того, является ли объект пустым
Объединение свойств двух объектов
Выбор способа определения свойств
Запрет любых изменений объекта
Перехват и изменение объектов с помощью прокси-объектов
Клонирование объектов
Создание глубокой копии объекта
Создание абсолютно уникальных ключей для свойств объекта
Создание перечислений с помощью Symbol
КлассыСоздание класса для многократного использования
Добавление в класс новых свойств
Улучшенное строковое представление класса
Создание произвольного класса посредством шаблона «Конструктор
Создание возможности для объединения методов класса в цепочку
Создание статических методов класса
Создание объектов посредством статических методов
Наследование функционала другого класса
Объединение классов JavaScript в модули
Асинхронное программированиеОбновление страницы в цикле
Использование функции, которая возвращает промис
Замена асинхронной функции с обратным вызовом на промис
Конкурентное выполнение нескольких промисов
Ожидание выполнения промиса с помощью await и async
Создание асинхронной функции-генератора
Выполнение фоновых задач с помощью Web Worker
Поддержка сообщений о ходе выполнения задач в Web Worker
Ошибки и тестированиеОбнаружение и обезвреживание ошибок
Перехват различных типов ошибок
Перехват асинхронных ошибок
Обнаружение необработанных ошибок
Выдача обычной ошибки
Выдача нестандартных ошибок
Написание модульных тестов для кода
Отслеживание покрытия кода тестами
JavaScript в браузереИнструментарий браузераОтладка кода JavaScript
Анализ производительности во время выполнения кода
Обнаружение неиспользуемого кода JavaScript
Выдача наилучших рекомендаций посредством Lighthouse
Работа с HTMLДоступ к определенному элементу, поиск его родительского и дочерних элементов
Перебор результатов, полученных от querySelectorAll(), с помощью forEach()
Привязка к элементу действия в ответ на щелчок
Поиск всех элементов с данным атрибутом
Выбор всех элементов определенного типа
Исследование дочерних элементов с помощью Selectors API
Изменение класса элемента
Присвоение элементу атрибута style
Создание абзаца и вставка в него текста
Вставка нового элемента в определенной точке DOM
Проверка того, установлен ли флажок
Вставка значений в таблицу HTML
Удаление строк из таблицы HTML
Скрытие частей страницы
Создание окон, всплывающих по наведению указателя мыши
Валидация данных формы
Выделение ошибочно заполненных полей форм и реализация специальных возможностей
Создание автоматически обновляемой области, доступной на специализированных устройствах
Получение удаленных данныхЗапрос удаленных данных с помощью Fetch API
Использование метода XMLHttpRequest
Отправка данных формы
Заполнение списка выбора данными, полученными с сервера
Синтаксический анализ данных, полученных в формате JSON
Получение и синтаксический анализ данных в формате XML
Передача двоичных данных и загрузка изображения
Обмен HTTP cookies между несколькими доменами
Двунаправленный обмен данными между клиентом и сервером посредством WebSockets
Длинный опрос удаленного источника данных
Сохранение данныхСохранение информации в cookies
Хранение данных на стороне клиента с помощью sessionStorage
Создание хранилища данных на стороне клиента на основе localStorage
Сохранение больших объемов данных на стороне клиента с помощью IndexedDB
Упрощение IndexedDB с помощью библиотеки
Работа с мультимедиаJavaScript для SVG
Доступ к SVG из скрипта веб-страницы
Построение столбчатой диаграммы в формате SVG с помощью библиотеки D
Интеграция элементов SVG и Canvas в HTML
Выполнение процедуры в начале воспроизведения аудиофайла
Управление отображением видео с помощью элемента video и JavaScript
Создание веб-приложенийСоздание пакетов JavaScript
JavaScript для мобильного интернета
Создание прогрессивного веб-приложения
Тестирование и профилирование прогрессивных веб-приложений
Получение текущего URL
Перенаправление на другой URL
Копирование текста в буфер обмена
Вывод на стационарном компьютере таких же уведомлений, как на мобильном устройстве
Открытие в браузере файла с локального устройства
Расширение возможностей с помощью Web Components
Выбор фреймворка для разработки на стороне клиента
NODE.JSОсновы NodeУправление версиями Node с помощью Node Version Manager
Ответ на простой запрос браузера
Интерактивная проверка кода Node с помощью REPL
Чтение данных из файла и запись данных в файл
Получение данных из терминала
Получение пути к выполняемому скрипту
Работа с таймерами и циклом событий Node
Модули NodeПоиск нужного модуля Node через npm
Преобразование библиотеки в модуль Node
Перенос кода в модульную среду
Создание устанавливаемого модуля Node
Создание мультиплатформенных библиотек
Тестирование модулей
Управление экосистемой NodeИспользование переменных среды
Что делать с адом обратных вызовов
Доступ к функциям командной строки из приложений Node
Передача аргументов в командную строку
Создание утилиты командной строки с подсказкой с помощью Commander
Обеспечение работоспособности экземпляра Node
Отслеживание изменений и перезапуск приложения в процессе разработки на локальном компьютере
Многократное выполнение задач по расписанию
Тестирование производительности и возможностей приложения WebSockets
Удаленные данныеПолучение удаленных данных
Анализ экранных данных
Доступ к данным в формате JSON посредством RESTful API
Построение веб-приложений с помощью ExpressИспользование Express для ответов на запросы
Использование Express-Generator
Задача маршрутизации
Работа с OAuth
Аутентификация пользователей в OAuth 2 с помощью Passport.js
Обработка форматированных данных
Построение RESTful API
Построение API GraphQL
Об авторахИллюстрация на обложке