JavaScript. Полное руководство: Справочник по самому популярному языку программирования. 7 изд

JavaScript. Полное руководство: Справочник по самому популярному языку программирования. 7 изд

JavaScript. Полное руководство: Справочник по самому популярному языку программирования. 7 изд
Автор: Флэнаган Дэвид
Переводчик: Ю. Н. Артеменко, С. Н. Тригуб
Дата выхода: 2021
Издательство: Диалектика
Количество страниц: 732
Размер файла: 15.5 MB
Тип файла: PDF
Добавил: codelibs
 Проверить на вирусы

Оглавление ....5

Содержание ....6

Об авторе ....19

Об иллюстрации на обложке ....19

Предисловие ....20

Соглашения, используемые в этой книге ....20

Использование примеров кода ....21

Благодарности ....21

Ждем ваших отзывов! ....22

ГЛАВА 1 ....23

Введение в JavaScript ....23

1.1. Исследование JavaScript ....25

1.2. Программа "Hello World" ....27

1.3. Тур по JavaScript ....27

1.4. Пример: гистограмма частоты использования символов ....34

1.5. Резюме ....37

Лексическая структура ....39

2.1. Текст программы JavaScript ....39

2.2. Комментарии ....40

2.3. Литералы ....40

2.4. Идентификаторы и зарезервированные слова ....40

2.4.1. Зарезервированные слова ....41

2.5. Unicode ....42

2.5.1. Управляющие последовательности Unicode ....42

2.6. Необязательные точки с запятой ....43

2.7. Резюме ....45

Типы, значения и переменные ....47

3.1. Обзор и определения ....47

3.2. Числа ....49

3.2.1. Целочисленные литералы ....50

3.2.2. Числовые литералы с плавающей точкой ....50

3.2.3. Арифметические действия в JavaScript ....51

3.2.4. Двоичное представление чисел с плавающей точкой и ошибки округления ....54

3.2.5. Целые числа произвольной точности с использованием Bigint ....55

3.2.6. Дата и время ....56

3.3. Текст ....56

3.3.1. Строковые литералы ....57

3.3.2. Управляющие последовательности в строковых литералах ....58

3.3.3. Работа со строками ....60

3.3.4. Шаблонные литералы ....61

3.3.5. Сопоставление с шаблонами ....63

3.4. Булевские значения ....63

3.6. Тип Symbol ....66

3.7. Глобальный объект ....67

3.8. Неизменяемые элементарные значения и изменяемые объектные ссылки ....68

3.9. Преобразования типов ....70

3.9.1. Преобразования и равенство ....72

3.9.2. Явные преобразования ....72

3.9.3. Преобразования объектов в элементарные значения ....74

3.10. Объявление и присваивание переменных ....78

3,10.1. Объявление с помощью let и const ....79

В.10.2. Объявление переменных с помощью var ....81

3.10.3. Деструктурирующее присваивание ....83

3.11. Резюме ....86

ГЛАВА 4 ....87

Выражения и операции ....87

4.1. Первичные выражения ....87

4.2. Инициализаторы объектов и массивов ....88

4.3. Выражения определений функций ....89

4.4. Выражения доступа к свойствам ....90

4.4.1- Условный доступ к свойствам ....91

4.5. Выражения вызова ....92

4.5.1. Условный вызов ....93

4.6. Выражения создания объектов ....94

47. Обзор операций ....95

4.7.1. Количество операндов ....97

4.7.2. Типы операндов и результата ....98

4.7.3. Побочные эффекты операций ....98

4 7.4. Приоритеты операций ....99

4.7.5. Ассоциативность операций ....100

4.7.6. Порядок вычисления ....100

4.8. Арифметические выражения ....101

4.8.1. Операция + ....102

4.8.2. Унарные арифметические операции ....103

4.8.3. Побитовые операции ....104

4.9. Выражения отношений ....106

4.9.1. Операции равенства и неравенства ....106

4.9.2. Операции сравнения ....109

4.10. Логические выражения ....112

4.10.1. Логическое И (&&) ....112

4.10.2. Логическое ИЛИ (| |) ....113

4.10.3. Логическое НЕ (!) ....114

4.11. Выражения присваивания ....115

4.11.1. Присваивание с действием ....115

4.12. Вычисление выражений ....116

4.12.1. eval () ....117

4.12.2. eval () в глобальном контексте ....118

4.12.3. eval () в строгом режиме ....119

4.13. Смешанные операции ....120

4.13.1. Условная операция (?:) ....120

4.13.2. Операция выбора первого определенного операнда (??) ....120

4.13.3. Операция typeof ....122

4.13.4. Операция delete ....122

4.13.5. Операция await ....124

4.13.6. Операция void ....124

4.13.7. Операция "запятая" ....124

4.14. Резюме ....125

Операторы ....127

5.1. Операторы-выражения ....128

5.2. Составные и пустые операторы ....129

5.3. Условные операторы ....130

5.3.1. if ....130

5.4. Циклы ....135

5.4.1. while ....135

5.5. Переходы ....142

5.5.1. Помеченные операторы ....143

5.6. Смешанные операторы ....151

5.7. Объявления ....154

5.8. Резюме по операторам JavaScript ....157

Объекты ....159

6.1. Введение в объекты ....159

6.2. Создание объектов ....160

6.3. Запрашивание и установка свойств ....163

6.3.1. Объекты как ассоциативные массивы ....164

6.3.2. Наследование ....166

б.З.З. Ошибки доступа к свойствам ....167

6.4. Удаление свойств ....168

6.5. Проверка свойств ....169

6.6. Перечисление свойств ....171

6.6.1. Порядок перечисления свойств ....172

6.7. Расширение объектов ....172

6.8. Сериализация объектов ....174

6.9. Методы Object ....174

6.9.3. Метод valueOf () ....176

6.9.4. Метод toJSONO ....176

6.10. Расширенный синтаксис объектных литералов ....177

6.10.1. Сокращенная запись свойств ....177

6.10.2. Вычисляемые имена свойств ....177

6.10.3. Символы в качестве имен свойств ....178

6.10.4. Операция распространения ....179

6.10.5. Сокращенная запись методов ....180

6.10.6. Методы получения и установки свойств ....181

6.11. Резюме ....184

Массивы ....185

7.1. Создание массивов ....186

7.1.1. Литералы типа массивов ....186

7.1.2. Операция распространения ....187

7.1.3. Конструктор Array () ....187

7.2. Чтение и запись элементов массива ....189

7.3. Разреженные массивы ....190

7.4. Длина массива ....191

7.5. Добавление и удаление элементов массива ....192

7.6. Итерация по массивам ....193

7.7. Многомерные массивы ....194

7.8. Методы массивов ....195

^•8.1. Методы итераторов для массивов ....195

7.8.2. Выравнивание массивов с помощью flat() и flatMap() ....200

7.8.3. Присоединение массивов с помощью concatO ....200

7.8.4. Организация стеков и очередей с помощью push(), pop (), shift () и unshift () ....201

7.8.5. Работа с подмассивами с помощью ....202

7.8.6. Методы поиска и сортировки массивов ....204

7.8.7- Преобразования массивов в строки ....207

^•8.8. Статические функции массивов ....207

7.9. Объекты, похожие на массивы ....208

7.10. Строки как массивы ....210

7.11. Резюме ....210

Функции ....211

8.1. Определение функций ....212

8.1.1. Объявления функций ....212

8.1.4. Вложенные функции ....216

8.2. Вызов функций ....216

8.2.2. Вызов метода ....218

8.2.3. Вызов конструктора ....221

8.2.4. Косвенный вызов функции ....222

8.2.5. Неявный вызов функции ....222

8.3. Аргументы и параметры функций ....223

8.3.1. Необязательные параметры и стандартные значения ....223

g.3.2. Параметры остатка и списки аргументов переменной длины ....225

8.3.3. Объект Arguments ....225

8.3.4. Операция распространения для вызовов функций ....226

8.3.5. Деструктуризация аргументов функции в параметры ....227

8.3.6. Типы аргументов ....230

8.4. Функции как значения ....231

3.4.1. Определение собственных свойств функций ....233

8.5. Функции как пространства имен ....234

8.6. Замыкания ....235

8.7. Свойства( методы и конструктор функций ....240

8.7.1. Свойство length ....240

8.7.5. Метод bind () ....242

8.7.6. Метод toString () ....243

8.7.7. Конструктор Function () ....243

8.8. Функциональное программирование ....244

8.8.1- Обработка массивов с помощью функций ....245

8.8.2. Функции высшего порядка ....246

8.8.3. Функции с частичным применением ....247

8.8.4. Мемоизация ....249

8.9. Резюме ....250

Классы ....251

9.1. Классы и прототипы ....252

9.2. Классы и конструкторы ....254

9,2-1- Конструкторы, идентичность классов и операция instanceof ....257

9.3. Классы с ключевым словом class ....259

9.3.1. Статические методы ....262

9.3.2. Методы получения, установки и других видов ....262

9,3.3. Открытые, закрытые и статические поля ....263

9.3.4. Пример: класс для представления комплексных чисел ....265

9.4. Добавление методов в существующие классы ....266

9-5. Подклассы ....267

9.5.1. Подклассы и прототипы ....268

9.5.2. Создание подклассов с использованием extends и super ....269

9.5.3. Делегирование вместо наследования ....272

9.5.4. Иерархии классов и абстрактные классы ....274

9.6. Резюме ....279

Модули ....281

10.1. Модули, использующие классы, объекты и замыкания ....282

Автоматизация модульности на основе замыканий ....283

10.2. Модули в Node ....284

10.2.1 Экспортирование в Node ....285

10.2.2. Импортирование в Node ....286

10.2-3- Модули в стиле Node для веб-сети ....287

10.3. Модули в ES6 ....287

10.3.1. Экспортирование в ES6 ....288

10.3.2. Импортирование в ES6 ....289

Ю.З.З. Импортирование и экспортирование с переименованием ....291

10.3.4. Повторное экспортирование ....292

10.3.5. Модули JavaScript для веб-сети ....294

10.3.6. Динамическое импортирование с помощью import О ....296

10.4. Резюме ....298

Стандартная ....299

библиотека ....299

JavaScript ....299

11.1. Множества и отображения ....300

11.1.1. Класс Set ....300

11.1.2. Класс Мар ....303

11.1.3. WeakMap и WeakSet ....306

11.2. Типизированные массивы и двоичные данные ....307

11.2.3. Использование типизированных массивов ....310

11.2.4. Методы и свойства типизированных массивов ....311

11.2.5. DataView и порядок байтов ....313

11.3. Сопоставление с образцом с помощью регулярных выражений ....314

11.3.1- Определение регулярных выражений ....315

11.3.2. Строковые методы для сопоставления с образцом ....326

11.3.3. Класс RegExp ....331

<11.4. Дата и время ....335

11.4.1. Отметки времени ....336

11.4.2. Арифметические действия с датами ....337

11.4.3. Форматирование и разбор строк с датами ....338

11.5. Классы ошибок ....339

11.6. Сериализация и разбор данных в формате JS0N ....340

11.6.1. Настройка JSON ....342

11.7. API-интерфейс интернационализации ....344

11.7.1. Форматирование чисел ....344

11.7.2. Форматирование даты и времени ....346

11.7.3. Сравнение строк ....349

H.8. API-интерфейс Console ....351

11.8.1. Форматирование вывода с помощью API-интерфейса Console ....354

11.9. API-интерфейсы URL ....354

11.9.1. Унаследованные функции для работы с URL ....357

11.10. Таймеры ....358

11.11. Резюме ....359

Итераторы и генераторы ....361

12.1. Особенности работы итераторов ....362

12.2. Реализация итерируемых объектов ....363

12.2.1. "Закрытие" итератора: метод return () ....366

12.3. Генераторы ....367

12.3.1. Примеры генераторов ....368

12.3.2. yield* и рекурсивные генераторы ....370

12.4. Расширенные возможности генераторов ....371

12.4.1. Возвращаемое значение генераторной функции ....371

12.4.2. Значение выражения yield ....372

12.4.3. Методы return () и throw () генератора ....373

12.4.4. Финальное замечание о генераторах ....374

12.5. Резюме ....374

Асинхронный ....375

JavaScript ....375

13.1. Асинхронное программирование ....376

с использованием обратных вызовов ....376

13.1.1. Таймеры ....376

0,1.2. События ....377

13.1.3. События сети ....377

13.1.4. Обратные вызовы и события в Node ....379

13.2. Объекты Promise ....380

13.2.1. Использование объектов Promise ....382

13.2.2. Выстраивание объектов Promise в цепочки ....385

13.2.3. Разрешение объектов Promise ....388

13.2.4. Дополнительные сведения ....390

об объектах Promise и ошибках ....390

13.2.5. Параллельное выполнение нескольких ....396

асинхронных операций с помощью Promise ....396

13,2.6. Создание объектов Promise ....397

13.2.7. Последовательное выполнение нескольких асинхронных операций с помощью Promise ....401

13.3. async и await ....404

13.3.1. Выражения await ....404

13.3.2. Функции async ....404

13.3.3. Ожидание множества объектов Promise ....405

13.3.4. Детали реализации ....406

13.4. Асинхронная итерация ....406

13.4.2. Асинхронные итераторы ....408

<13.4.3. Асинхронные генераторы ....409

П.4.4. Реализация асинхронных итераторов ....409

13.5. Резюме ....414

Метапрограммирование ....415

14.1. Атрибуты свойств ....416

14.2. Расширяемость объектов ....420

14.3. Атрибут prototype ....422

14.4. Хорошо известные объекты Symbol ....423

14.4.6. Объекты Symbol для сопоставления с образцом ....429

14.5. Теги шаблонов ....432

14.6. API-интерфейс Reflect ....434

14.7. Объекты Proxy ....436

14.8. Резюме ....443

JavaScript в веб-браузерах ....445

15.1. Основы программирования для веб-сети ....448

15.1.1. Код JavaScript в HTML-дескрипторах ....448

15.1.2, Объектная модель документа ....451

15.1.3. Глобальный объект в веб-браузерах ....453

15.1.4. Сценарии разделяют пространство имен ....454

15,1.5. Выполнение программ JavaScript ....455

15.1.6. Ввод и вывод программы ....458

15.1.7. Ошибки в программе ....459

15.1.8. Модель безопасности веб-сети ....460

15.2. События ....464

15.2.1. Категории событий ....466

15.2.2. Регистрация обработчиков событий ....467

15.2.3. Вызов обработчиков событий ....471

15.2-4. Распространение событий ....473

15.2.5. Отмена событий ....474

15.2.6. Отправка специальных событий ....474

15.3. Работа с документами в сценариях ....475

15.3.1. Выбор элементов документа ....476

15.3.2. Структура и обход документа ....479

15.3.3. Атрибуты ....482

15.3.4. Содержимое элементов ....484

15.3.5. Создание, вставка и удаление узлов ....486

15.3.6. Пример: генерация оглавления ....487

15.4. Работа с CSS в сценариях ....490

15.4.1. Классы CSS ....490

15.4.4. Работа с таблицами стилей в сценариях ....494

15.4.5. Анимация и события CSS ....495

15.5. Геометрия и прокрутка документов ....497

15.5.1. Координаты документа и координаты окна просмотра ....497

15.5.2. Запрашивание геометрии элемента ....499

15-5.3. Определение элемента в точке ....499

15.5.4. Прокрутка ....500

15.5.5. Размер окна просмотра, размер содержимого и позиция прокрутки ....501

15.6. Веб-компоненты ....502

15.6.1. Использование веб-компонентов ....503

15.6.2. Шаблоны HTML ....505

15.6.3. Специальные элементы ....506

15.6.4. Теневая модель DOM ....509

15.6.5. Пример: веб-компонент <search-box> ....511

15.7. SVG: масштабируемая векторная графика ....516

15.7.1. SVG в HTML ....516

15.7.2. Работа с SVG в сценариях ....518

15.7.3. Создание изображений SVG с помощью JavaScript ....519

15.8. Графика в <canvas> ....522

15.8.1. Пути и многоугольники ....524

О® ....526

15.8.2. Размеры и координаты холста ....527

15.8.3. Графические атрибуты ....528

15.8.4. Операции рисования холста ....533

15.8.5. Трансформации системы координат ....538

15.8.6. Отсечение ....542

15.8.7. Манипулирование пикселями ....543

15.9. API-интерфейсы Audio ....545

15.9.1. Конструктор Audio () ....545

15.9.2. API-интерфейс WebAudio ....546

15.10. Местоположение, навигация и хронология ....547

15.10.1. Загрузка новых документов ....548

15.10.2. Хронология просмотра ....549

15.10.3. Управление хронологией с помощью событий "hashchange" ....550

15.10.4. Управление хронологией с помощью метода pushState () ....551

15.11. Взаимодействие с сетью ....557

15.11.1. fetch () ....557

15.11.2. События, посылаемые сервером ....568

15.11.3. Веб-сокеты ....572

15.12. Хранилище ....574

15.12.2. Cookie-наборы ....578

15.12.3. IndexedDB ....582

15.13. Потоки воркеров и обмен сообщениями ....587

15.13.1. Объекты воркеров ....588

15.13.2. Глобальный объект в воркерах ....589

15.13.3. Импортирование кода в воркер ....590

15.13.4. Модель выполнения воркеров ....591

15.13.6. Обмен сообщениями между разными ....594

источниками с помощью postMessage () ....594

15.14. Пример: множество Мандельброта ....595

15.15. Резюме и рекомендации ....608<br> относительно дальнейшего чтения ....608

15.15.1. HTML и CSS ....609

15.15.2. Производительность ....610

15.15.3. Безопасность ....610

15.15.4. WebAssembly ....610

15.15.5. Дополнительные средства объектов Document и Window ....611

15.15.6. События ....612

15.15.7. Прогрессивные веб-приложения и служебные воркеры ....613

15.15.8. API-интерфейсы мобильных устройств ....614

15.15.9. API-интерфейсы для работы с двоичными данными ....615

15.15.10. API-интерфейсы для работы с медиаданными ....615

15.15.11. API-интерфейсы для работы с криптографией и связанные с ними API-интерфейсы ....615

JavaScript на стороне сервера с использованием ....617

Node ....617

16.1. Основы программирования в Node ....618

16.1.1. Вывод на консоль ....618

16.1.2. Аргументы командной строки и переменные среды ....619

16.1.3. Жизненный цикл программы ....620

16.1.4. Модули Node ....621

16.1.5. Диспетчер пакетов Node ....622

16.2. Среда Node асинхронна по умолчанию ....623

16.3. Буферы ....627

16.5. Потоки данных ....631

16.5.1. Каналы ....634

16.5.2. Асинхронная итерация ....636

16.5.3. Запись в потоки и обработка противодавления ....637

16.5.4. Чтение потоков с помощью событий ....640

16.6. Информация о процессе, центральном процессоре и операционной системе ....643

16.7. Работа с файлами ....645

16.7.1. Пути, файловые дескрипторы и объекты FileHandle ....646

16.7.2. Чтение из файлов ....647

16.7.3. Запись в файлы ....650

16.7.4. Файловые операции ....652

16.7.5. Метаданные файлов ....653

16.7.6. Работа с каталогами ....654

16.8. Клиенты и серверы HTTP ....656

16.9. Сетевые серверы и клиенты, не использующие HTTP ....661

16.10. Работа с дочерними процессами ....664

16.10.2. ехес () иexecFile() ....666

16.10.3. spawn () ....667

16.10.4. fork () ....668

16.11. Потоки воркеров ....669

16.11.1. Создание воркеров и передача сообщений ....671

16.11.2. Среда выполнения воркеров ....673

16.11.3. Каналы связи и объекты MessagePort ....674

16.11.4. Передача объектов MessagePort и типизированных массивов ....675

16.11.5. Разделение типизированных массивов между потоками ....677

16.12. Резюме ....679

Инструменты и расширения JavaScript ....681

17.1. Линтинг с помощью ESLint ....682

17.2. Форматирование кода JavaScript с помощью Prettier ....683

17.3. Модульное тестирование с помощью Jest ....684

17.4. Управление пакетами с помощью npm ....687

17.5. Пакетирование кода ....689

17.6. Транспиляция с помощью Babel ....691

17.7. JSX: выражения разметки в JavaScript ....692

17.8. Контроль типов с помощью Flow ....697

17.8.1. Установка и запуск Flow ....699

17.8.2. Использование аннотаций типов ....700

17.8.3. Типы классов ....703

17.8.4. Типы объектов ....704

17.8.5. Псевдонимы типов ....705

17.8.6. Типы массивов ....705

17.8.7. Другие параметризированные типы ....707

17.8.8. Типы, допускающие только чтение ....709

17.8.9. Типы функций ....709

17.8.10. Типы объединений ....710

17.8.11. Перечислимые типы и различающие объединения ....711

17.9. Резюме ....713

Предметный указатель ....714

Содержание ....721

JavaScript — это язык программирования для веб-сети, который в настоящее время используется большим количеством разработчиков программного обеспечения, чем любой другой язык программирования. В течение почти 25 лет этот бестселлер служил исчерпывающим руководством для программистов на JavaScript, и новое издание книги полностью обновлено с целью охвата версии 2020 языка JavaScript. Повсюду в книге вы будете находить яркие и привлекательные примеры кода. Вам также предлагаются новые главы, в которых раскрываются классы, модули, итераторы, генераторы, объекты Promise и async/await.

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


Похожее:

Список отзывов:

Нет отзывов к книге.