Новые возможности JavaScript. Как написать чистый код по всем правилам современного языка

Краудер Ти Джей

Код товара: 4956592
(0 оценок)Оценить
ОтзывНаписать отзыв
ВопросЗадать вопрос
1 / 4
1 743
2 601
Доставим в
г. Москва
Планируемая дата
20 мая (Пн)
Курьером
Л-Пост
бесплатно от 10 000 ₽
В пункт выдачи
от 155 ₽
бесплатно от 10 000 ₽
Точная стоимость доставки рассчитывается при оформлении заказа
Издательство:
Оригинальное название:
Javascript. The New Toys
Год издания:
2023 г.
Переводчик:

Описание

Характеристики

Руководство по JavaScript для тех, кто хочет кодить быстро и эффективно.
«Новые возможности JavaScript» — это сборник правил написания кода на современном языке JavaScript. На наглядных примерах автор объясняет, как работают последние версии JS, какие приемы в нем можно использовать, чтобы сделать код коротким и чистым, а каких ошибок лучше избегать, чтобы не было багов.

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

Благодаря ей вы узнаете:
• Чем последние версии JS отличаются друг от друга.
• Как расширился функционал объектов в коде.
• Что нового могут предложить функции.
• Как использовать современный синтаксис языка.
• Какими будут дальнейшие улучшения JS.

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

Ти Джей Краудер — инженер-программист с 30-летним стажем, руководитель британской компании Farsight Software, которая занимается консалтингом и разработкой программного обеспечения.
количество томов
1
количество страниц
640 стр.
переплет
Твёрдый переплёт
размеры
243x167x33 мм
тип бумаги
офсетная (60-220 г/м2)
ISBN
978-5-04-159515-9
возрастная категория
12+
вес
код в Майшоп
4956592
язык
русский

Содержание

ОБ АВТОРЕ
О ТЕХНИЧЕСКОМ РЕДАКТОРЕ О ТЕХНИЧЕСКОМ
КОРРЕКТОРЕ БЛАГОДАРНОСТИ ВВЕДЕНИЕ
О чем эта книга?
Кому стоит читать эту книгу Как пользоваться
этой книгой
ГЛАВА 1. НОВЫЕ ВОЗМОЖНОСТИ В ES2015-ES2020 И
ДАЛЕЕ
Определения, что есть что и терминология
Что такое Ecma? ECMAScript? TC39?
Что такое ES6? ES7? ES2015? ES2020?
"Движки" JavaScript, браузеры и др.
Что за "новые возможности"?
Как создаются новые возможности?
Кто здесь главный Процесс
Вовлечение в процесс Следите за новыми
возможностями
Использование текущих функций во вчерашних
условиях и разрабатываемых возможностей
сегодня Транспилирование примера с помощью
Babel Обзор главы
ГЛАВА 2. ОБЪЯВЛЕНИЯ БЛОЧНОЙ ОБЛАСТИ
ВИДИМОСТИ ДЛЯ LET И CONST
Введение в let и const Истинная блочная область
видимости Повторные объявления - это ошибка
Поднятие и временная мертвая зона Новый вид
глобальных переменных Const: Константы в
JavaScript Основы const
Объекты, на которые ссылается const, по-
прежнему изменяемы
Блочная область видимости в циклах
Проблема "замыканий в циклах"
Привязки: Как работают переменные, константы и
другие идентификаторы Циклы while и do-while
Последствия для производительности Константа в
блоках цикла Константа в циклах for-in От старых
привычек к новым
Используйте const или let вместо var Сохраняйте
узкую область видимости переменных Используйте
блочную область видимости вместо встроенных
анонимных функций
ГЛАВА 3. ФУНКЦИИ
Стрелочные функции и лексические this, super и т.
д.
Синтаксис стрелочной функции Стрелочные
функции и лексические this Стрелочные функции не
могут быть конструкторами Значения параметров
по умолчанию Значения по умолчанию - это
выражения
Значения по умолчанию вычисляются в их
собственной области видимости Значения по
умолчанию не увеличивают арность функции
Остаточные параметры
Висящие запятые в списках параметров и вызовах
функций Свойство имени функции Объявления
функций внутри блоков
Объявления функций внутри блоков: Стандартная
семантика Объявления функций внутри блоков:
Устаревшая веб-семантика От старых привычек к
новым
Используйте стрелочные функции вместо
различных обходных путей для этого значения
Используйте стрелочные функции для обратных
вызовов, если не используете аргументы или this
Рассмотрите применение стрелочных функций и в
других местах Не используйте стрелочные
функции, когда вызывающей стороне необходимо
контролировать значение this
Используйте значения параметров по умолчанию, а
не код, предоставляющий значения по умолчанию
Используйте остаточный параметр вместо
ключевого слова arguments Рассмотрите
возможность использования висящих запятых, если
это оправдано
ГЛАВА 4. КЛАССЫ
Что такое класс?
Представление нового синтаксиса класса
Добавление конструктора Добавление свойств
экземпляра Добавление метода прототипа
Добавление статического метода Добавление
свойства-акцессора Вычисляемые имена методов
Сравнение с устаревшим синтаксисом Создание
подклассов Ключевое слово super Написание
конструкторов подклассов
Наследование свойств и методов прототипа
суперкласса и доступ к ним Наследование
статических методов Ключевое слово super в
статических методах Методы, возвращающие
новые экземпляры Создание подклассов для
встроенных компонентов Где доступен super Отказ
от Object.prototype Синтаксис new.target
Объявления классов в сравнении с выражениями
классов Объявления классов Выражения классов
Еще не все
От старых привычек к новым
Использование класса при создании функций
конструктора
ГЛАВА 5. ОБЪЕКТЫ
Вычисляемые имена свойств Стенография свойств
Получение и настройка прототипа объекта Метод
Object.setPrototypeOf Свойство proto в
браузерах
Буквальное указание имени свойства proto
в браузерах
Синтаксис метода и применение super вне классов
Тип данных Symbol Почему же символы?
Создание и использование символов Символы не
для конфиденциальности Глобальные символы
Хорошо известные символы Новые функции
объектов Метод Object.assign Метод Object.is
Метод Object.values Метод Object.entries Метод
Object.fromEntries Функция
Object.getOwnPropertySymbols Метод
Object.getOwnPropertyDescriptors Метод
Symbol.toPrimitive Порядок свойств Синтаксис
расширения свойств От старых привычек к новым
Использовать вычисляемый синтаксис при создании
свойств с динамическими именами
Используйте сокращенный синтаксис при
инициализации свойства из переменной с тем же
именем
Используйте метод Object.assign вместо
пользовательских функций
"extend" или явного копирования всех свойств
Используйте синтаксис расширения при создании
нового объекта
на основе свойств существующего объекта
Используйте символ, чтобы избежать коллизии
имен
Используйте методы
Object.getPrototypeOf/setPrototypeOf
вместо свойства proto
Используйте синтаксис метода для методов
ГЛАВА 6. ВОЗМОЖНОСТИ ИТЕРАЦИИ: ИТЕРИРУЕМЫЕ
ОБЪЕКТЫ, ИТЕРАТОРЫ, ЦИКЛЫ FOR-OF,
ИТЕРАТИВНЫЕ РАСШИРЕНИЯ, ГЕНЕРАТОРЫ
Итерируемые объекты, итераторы, циклы for-of,
итерируемое расширение Итераторы и
итерируемые объекты Цикл for-of: Неявное
использование итератора Явное использование
итератора Остановка итерации на ранней стадии
Прототип итератора объекта Сделать что-либо
итерируемым объектом Итерируемые итераторы
Синтаксис итеративного расширения Итераторы,
цикл for-of и DOM Функции-генераторы
Базовая функция-генератор, просто производящая
значения Использование функций-генераторов для
создания итераторов Функции-генераторы в
качестве методов
Использование генератора напрямую Потребление
значений генераторами Использование оператора
return в функции-генераторе Приоритет оператора
yield
Методы return и throw: Завершение работы
генератора Остановка генератора или
итеративного объекта: yield*
От старых привычек к новым
Используйте конструкции с итеративными
элементами Используйте возможности итеративных
коллекций DOM Используйте интерфейсы
итераторов и итеративных объектов Используйте
синтаксис итеративного расширения в большинстве
мест, где вы применяли Function.prototype.apply
Используйте генераторы
ГЛАВА 7. ДЕСТРУКТУРИЗАЦИЯ
Краткий обзор
Базовая деструктуризация объекта
Базовая (и итеративная) деструктуризация массива
Значения по умолчанию
Синтаксис Rest в шаблонах деструктуризации
Использование отличающихся имен Вычисляемые
имена свойств Вложенная деструктуризация
Деструктуризация параметров Деструктуризация в
циклах От старых привычек к новым
Используйте деструктуризацию при получении
только некоторых свойств от объекта
Используйте деструктуризацию для объектов
options
ГЛАВА 8. ОБЪЕКТЫ PROMISE
Почему же промисы?
Основы промисов Краткий обзор Пример
Промисы и элементы thenable Использование
существующего промиса
Метод then
Связывание промисов в цепочки Сравнение с
обратными вызовами Метод catch
Метод finally
Метод throw в обработчиках then, catch и finally
Метод then с двумя аргументами Добавление
обработчиков к уже выполненным промисам
Создание промисов Конструктор Promise Метод
Promise.resolve Метод Promise.reject Другие
служебные методы промисов Метод Promise.all
Метод Promise.race Метод Promise.allSettled Метод
Promise.any Шаблоны промисов
Обрабатывать ошибки или возвращать промис
Серии промисов Параллельные промисы
Антишаблоны промисов
Излишнее выражение new Promise^*...*/)
Отсутствие обработки ошибок (или неправильная
обработка)
Оставление ошибок незамеченными при
преобразовании API обратного вызова
Неявное преобразование отклонения в успешное
выполнение Попытка использовать результаты вне
цепочки Использование обработчиков бездействия
Неправильное разветвление цепочки Подклассы
промисов От старых привычек к новым
Используйте промисы вместо успешных/неудачных
обратных вызовов
ГЛАВА 9. АСИНХРОННЫЕ ФУНКЦИИ, ИТЕРАТОРЫ И
ГЕНЕРАТОРЫ
Асинхронные функции
Создание промисов асинхронными функциями
Оператор await использует промисы
Стандартная логика становится асинхронной при
использовании await Отклонения - это исключения,
исключения - это отклонения; выполнение - это
результаты, возвращаемые значения - это
разрешения Параллельные операции в
асинхронных функциях Нет необходимости
возвращать await
Ловушка PitFaLL: Использование асинхронной
функции в неожиданном месте Асинхронные
итераторы, итерируемые и генераторы
Асинхронные итераторы
Асинхронные генераторы Выражение for-await-of
От старых привычек к новым
Используйте асинхронные функции и await вместо
явных промисов и then/catch
ГЛАВА 10. ШАБЛОНЫ, ПОМЕЧЕННЫЕ ФУНКЦИИ И
НОВЫЕ ВОЗМОЖНОСТИ СТРОК
Шаблонные литералы
Базовая функциональность (Непомеченные
шаблонные литералы)
Помеченные шаблонные функции (Помеченные
шаблонные литералы)
Метод String.raw
Повторное использование шаблонных литералов
Шаблонные литералы и автоматическая вставка
точки с запятой Улучшенная поддержка Юникода
Юникод, а что такое строка JavaScript?
Экранирующая последовательность кодовой точки
Метод String.fromCodePoint Метод
String.prototype.codePointAt Метод
String.prototype.normalize Итерация
Новые строковые методы
Метод String.prototype.repeat
Методы String.prototype.startsWith и
String.prototype.endsWith Метод
String.prototype.includes
Методы String.prototype.padStart и
String.prototype.padEnd Методы
String.prototype.trimStart и String.prototype.trimEnd
Обновления методов match, split, search и replace
От старых привычек к новым
Используйте шаблонные литералы вместо
конкатенации строк (где это уместно) Используйте
помеченные функции и шаблонные литералы для
DSL вместо пользовательских механизмов
заполнения Используйте строковые итераторы
ГЛАВА 11. МАССИВЫ
Новые методы массивов Метод Array.of Метод
Array.from Метод Array.prototype.keys Метод
Array.prototype.values Метод
Array.prototype.entries
Метод Array.prototype.copyWithin
МетодArray.prototype.find Метод
Array.prototype.findIndex МетодArray.prototype.fill
Общая ловушка Pitfall: Использование объекта в
качестве значения заполнения Метод
Array.prototype.includes Метод Array.prototype.flat
Метод Array.prototype.flatMap Итерация,
расширение, деструктуризация Стабильная
сортировка массива Типизированные массивы
Краткий обзор
Основное использование
Подробнее о преобразовании значений Объект
ArrayBuffer: Хранилище для типизированных
массивов Порядковый номер (Порядок байтов)
Вид DataView: Необработанный доступ к буферу
Совместное использование ArrayBuffer массивами
Совместное использование без перекрытия
Совместное использование с перекрытием
Подклассы типизированных массивов Методы
типизированного массива Стандартные методы
массива Метод%TypedArray%.prototype.set Метод
%TypedArray%.prototype.subarray От старых
привычек к новым
Используйте find и findIndex для поиска в массивах
вместо циклов (где это уместно)
Используйте для заполнения массивов Array.fill, а
не циклы Используйте readAsArrayBuffer вместо
readAsBinaryString
ГЛАВА 12. КАРТЫ И МНОЖЕСТВА
Коллекции Map или карты
Основные операции с картой Равенство ключей
Создание карт из итерируемых Итерация
содержимого карты Создание подклассов для
карты Производительность Множества
Основные операции с множеством Создание
множеств из итерируемых
Итерация содержимого множества Создание
подклассов для множества Производительность
Слабые карты (WeakMap)
Слабые карты не итерируемые Варианты
использования и примеры
Вариант использования: Закрытая информация
Вариант использования: Хранение информации для
объектов, находящихся вне вашего контроля
Значения, ссылающиеся на ключ Слабые
множества (WeakSet)
Вариант использования: Отслеживание Вариант
использования: Маркировка От старых привычек к
новым
Используйте карты вместо объектов для карт
общего назначения Используйте множества вместо
объектов для множеств Используйте слабые карты
для хранения личных данных вместо публичных
свойств
ГЛАВА 13. МОДУЛИ
Введение в модули Основы модулей
Спецификатор модуля Базовый именованный
экспорт Экспорт по умолчанию Использование
модулей в браузерах
Скрипты модуля не задерживают синтаксический
анализ Атрибут nomodule Спецификаторы модулей
в Интернете Использование модулей в Node.js
Спецификаторы модулей в Node.js
Node.js добавляет дополнительные возможности
модулей Переименование экспорта Повторный
экспорт экспорта из другого модуля
Переименование импорта Импорт объекта
пространства имен модуля Экспорт объекта
пространства имен другого модуля Импорт модуля
только из-за побочных эффектов Импорт и экспорт
записей Импорт записей Экспорт записей
Импорт в режиме реального времени и доступности
только для чтения Экземпляры модуля зависят от
базы realm
Как загружаются модули
Получение и синтаксический анализ Создание
экземпляра Выполнение
Обзор временной мертвой зоны (TDZ)
Циклические зависимости и TDZ Обзор синтаксиса
импорта/экспорта Разновидности экспорта
Разновидности импорта Динамический импорт
Динамический импорт модуля Пример
динамического модуля Динамический импорт в
немодульных скриптах Встряхивание дерева
Бандлинг (Объединение)
Метаданные импорта Модули воркеров
Загрузка веб-воркера в качестве модуля Загрузка
воркера Node.js в качестве модуля Воркер
находится в собственной базе realm От старых
привычек к новым
Используйте модули вместо псевдопространств
имен
Используйте модули вместо обертывания кода в
функции области видимости Используйте модули,
чтобы избежать создания мегалитических файлов
кода Конвертируйте CJS, AMD и другие модули в
ESM
Не изобретайте велосипед, используйте хорошо
обслуживаемый бандлер
ГЛАВА 14. РЕФЛЕКСИЯ - ОБЪЕКТЫ REFLECT И PROXY
Объект Reflect
Метод Reflect.apply Метод Reflect.construct Метод
Reflect.ownKeys Методы Reflect.get и Reflect.set
Другие функции Reflect Объект Proxy
Пример: Регистрирующий прокси Ловушки прокси
Общие возможности Ловушка apply Ловушка
construct Ловушка defineProperty Ловушка
deleteProperty Ловушка get
Ловушка getOwnPropertyDescriptor
Ловушка getPrototypeOf
Ловушка has
Ловушка isExtensible
Ловушка ownKeys
Ловушка preventExtensions
Ловушка set
Ловушка setPrototypeOf Пример: Скрытие свойств
Отключаемые прокси От старых привычек к новым
Используйте прокси, а не полагайтесь на
потребляющий код, чтобы не изменять объекты
API
Используйте прокси для отделения кода
реализации от инструментального кода
ГЛАВА 15. ОБНОВЛЕНИЯ РЕГУЛЯРНЫХ ВЫРАЖЕНИЙ
Свойство flags Новые флаги Липкий флаг (у)
Флаг Юникода (u)
Флаг "все точки" (s)
Именованные группы захвата Основная
функциональность Обратные ссылки Заменяющие
токены
Утверждения ретроспективной проверки
Позитивная ретроспективная проверка Негативная
ретроспективная проверка
Жадность проявляется в принципе справа налево в
ретроспективных проверках Ссылки и нумерация
групп захвата Функциональные возможности
Юникода Экранирование кодовой точки
Экранирование свойства Юникода От старых
привычек к новым
Используйте липкий флаг (y) вместо создания
подстрок и использования "л" при синтаксическом
анализе
Используйте флаг "все точки" (s) вместо
использования обходных путей для сопоставления
всех символов (включая разрывы строк).
Используйте именованные группы захвата вместо
анонимных Используйте ретроспективные
проверки вместо различных обходных путей
Используйте экранирование кодовой точки вместо
суррогатных пар в регулярных выражениях
Используйте шаблоны Юникода вместо обходных
путей
ГЛАВА 16. СОВМЕСТНО ИСПОЛЬЗУЕМАЯ ПАМЯТЬ
Введение
Здесь водятся драконы!
Поддержка браузера
Основы совместно используемой памяти
Критические секции, блокировки и условные
переменные Создание совместно используемой
памяти Совместно используется память, но не
объекты
Условия гонки, вышедшие из строя хранилища,
устаревшие значения, значения с разрывами,
тиринг и многое другое Объект Atomics
Низкоуровневые возможности объекта Atomics
Использование Atomics для приостановки и
возобновления потоков Пример совместно
используемой памяти Здесь водятся драконы!
(Снова)
От старых привычек к новым
Используйте совместно используемые блоки вместо
многократного обмена большими блоками данных
Используйте Atomics.wait и Atomics.notify вместо
разделения заданий воркеров для поддержки
цикла событий (при необходимости)
ГЛАВА 17. РАЗЛИЧНЫЕ АСПЕКТЫ
Тип данных BigInt
Создание значения типа BigInt Явное и неявное
преобразование Производительность Массивы
BigInt64Array и BigUint64Array Служебные функции
Новые целочисленные литералы Двоичные
целочисленные литералы Восьмеричные
целочисленные литералы, попытка № 2 Новые
математические методы Общие математические
функции
Поддержка низкоуровневых математических
функций
Оператор возведения в степень (**)
Изменения в Date.prototype.toString Изменения в
Function.prototype.toString Дополнения
конструктора Number "Безопасные" целые числа
Константы Number.MAX_SAFE_INTEGER и
Number.MIN_SAFE_INTEGER
МетодNumber.isSafeInteger
Метод Number.isInteger Методы Number.isFinite и
Number.isNaN Методы Number.parselnt и
Number.parseFloat Свойство Number.EPSILON
Символ Symbol.isConcatSpreadable Различные
хитрости синтаксиса Оператор нулевого слияния
Опциональная цепочка Необязательные привязки
catch Разрывы строк Юникода в JSON
Правильно сформированный JSON из метода
JSON.stringify
Различные стандартные библиотеки/глобальные
дополнения
Метод SymboL.hasInstance Свойство
Symbol.unscopables Объект globalThis Свойство
description символа Метод String.prototype.matchAll
Приложение Б: Возможности, доступные только
для браузера HTML-подобные комментарии
Хитрости регулярного выражения
Расширение управляющего символа экранирования
(\cX)
Допуск недопустимых последовательностей Метод
RegExp.prototype.compile Дополнительные
встроенные свойства Дополнительные свойства
объекта Дополнительные строковые методы
Различные фрагменты свободного или неясного
синтаксиса Когда же document.all есть... или нет?
Оптимизация хвостового вызова От старых
привычек к новым Используйте двоичные
литералы
Используйте новые математические функции
вместо различных математических обходных путей
Используйте оператор нулевого слияния для
значений по умолчанию Используйте опциональную
цепочку вместо проверок &&
Уберите привязку ошибки (e) из "catch (e)", если
она не используется Используйте оператор
возведения в степень (**) вместо метода Math.pow
ГЛАВА 18. ГРЯДУЩИЕ ФУНКЦИОНАЛЬНЫЕ
ВОЗМОЖНОСТИ КЛАССА
Публичные и приватные поля класса, методы и
акцессоры
Определения публичного поля (свойства)

Отзывы

Вопросы

Поделитесь своим мнением об этом товаре с другими покупателями — будьте первыми!

Дарим бонусы за отзывы!

За какие отзывы можно получить бонусы?
  • За уникальные, информативные отзывы, прошедшие модерацию
Как получить больше бонусов за отзыв?
  • Публикуйте фото или видео к отзыву
  • Пишите отзывы на товары с меткой "Бонусы за отзыв"
Правила начисления бонусов
Задайте вопрос, чтобы узнать больше о товаре
Если вы обнаружили ошибку в описании товара «Новые возможности JavaScript. Как написать чистый код по всем правилам современного языка» (авторы: Краудер Ти Джей), то выделите её мышкой и нажмите Ctrl+Enter. Спасибо, что помогаете нам стать лучше!
Ваш населённый пункт:
г. Москва
Выбор населённого пункта