Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Современный JavaScript для нетерпеливых

Покупка
Артикул: 751472.01.99
Доступ онлайн
899 ₽
В корзину
Язык JavaScript изначально был предназначен для написания небольших объемов кода внутри браузера, но современный JavaScript радикально отличается от своего прародителя. В наши дни программисты на JavaScript активно осваивают функциональный, объектно-ориентированный и асинхронный стили программирования, оставляя в прошлом архаичные конструкции, чреватые ошибками. Данная книга - полное, но при этом лаконичное руководство по версии JavaScript E6 и выше. Вам не потребуется знаний старых версий языка, а сразу предлагается начать с более мощных современных. Автор бестселлеров Кэй С. Хорстман рассказывает обо всем, что вам необходимо знать, излагая материал небольшими порциями, рассчитанными на легкое усвоение. Практические советы и примеры кода помогут эффективно воспользоваться всеми новшествами, избежать подводных камней и устаревших средств и извлечь максимум пользы из надежных инструментов и фреймворков для разработки ПО на современном JavaScript. Издание предназначено прежде всего программистам, владеющих такими языками, как Java, C#, C, или C++.
Хорстманн, К. С. Современный JavaScript для нетерпеливых : практическое пособие / Кэй С. Хорстманн ; пер. с англ. А. А. Слинкина. - Москва : ДМК Пресс, 2021. - 288 с. - ISBN 978-5-97060-177-8. - Текст : электронный. - URL: https://znanium.com/catalog/product/1225356 (дата обращения: 26.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Кэй С. Хорстман

Современный JavaScript 

для нетерпеливых

Modern JavaScript
for the Impatient

Cay S. Horstmann

Boston • Columbus • New York • San Francisco • Amsterdam • Cape Town

Dubai • London • Madrid • Milan • Munich • Paris • Montreal • Toronto • Delhi • Mexico City

São Paulo • Sydney • Hong Kong • Seoul • Singapore • Taipei • Tokyo

Современный JavaScript 
для нетерпеливых

Кэй С. Хорстман

Москва, 2021

УДК 004.42Javascript
ББК
32.972
Х79

Хорстман К. С.

Х79 
Современный JavaScript для нетерпеливых / пер. с англ. А. А. Слинкина. – 
М.: ДМК Пресс, 2021. – 288 с.: ил. 

ISBN 978-5-97060-177-8

Язык JavaScript стремительно набирает популярность: он поддерживается всеми 

браузерами и все активнее проникает в серверное программирование. Однако 
даже у опытных программистов, знакомых с такими языками, как Java, C#, C или 
C++, могут возникнуть затруднения при переходе на JavaScript. Эта книга призвана облегчить их задачу.

В отличие от большинства изданий, посвященных JavaScript, акцент здесь 

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

Изучив книгу, читатель сумеет написать следующую версию своего приложения 

на современном JavaScript.

УДК 004.42Javascript
ББК 32.972

Authorized translation from the English language edition, entitled MODERN JAVASCRIPT 

FOR THE IMPATIENT, 1st Edition by CAY HORSTMANN, published by Pearson Education, Inc, 
publishing as Addison-Wesley Professional. Russian language edition copyright © 2021 by DMK 
Press. All rights reserved.

Все права защищены. Любая часть этой книги не может быть воспроизведена в ка
кой бы то ни было форме и какими бы то ни было средствами без письменного разрешения 
владельцев авторских прав.

ISBN 978-0-13-650214-2 (англ.) 
©  Pearson Education, Inc., 2020 

ISBN 978-5-97060-177-8 (рус.) 
©  Оформление, издание, перевод, 

ДМК Пресс, 2021

Посвящается Чи – самому важному человеку в моей жизни

Содержание

Предисловие ............................................................................................12
Об авторе ...................................................................................................16
От издательства ......................................................................................17

Глава 1. Значения и переменные ....................................................18
1.1. Запуск JavaScript .....................................................................................18
1.2. Типы и оператор typeof .........................................................................20
1.3. Комментарии .........................................................................................21
1.4. Объявления переменных ......................................................................22
1.5. Идентификаторы ...................................................................................23
1.6. Числа .......................................................................................................24
1.7. Арифметические операторы .................................................................25
1.8. Булевы значения ....................................................................................27
1.9. null и undefined.......................................................................................27
1.10. Строковые литералы ............................................................................28
1.11. Шаблонные литералы ..........................................................................30
1.12. Объекты ................................................................................................31
1.13. Синтаксис объектного литерала .........................................................32
1.14. Массивы ................................................................................................33
1.15. JSON.......................................................................................................34
1.16. Деструктуризация ................................................................................35

1.17. Еще о деструктуризации ......................................................................37

1.17.1. Дополнительные сведения о деструктуризации объектов .........37
1.17.2. Объявление прочих .......................................................................38
1.17.3. Значения по умолчанию ...............................................................38

Упражнения ..................................................................................................39

Глава 2. Управляющие конструкции ...............................................40
2.1. Выражения и предложения ...................................................................40
2.2. Вставка точки с запятой ........................................................................41
2.3. Ветвления ...............................................................................................44
2.4. Булевость ................................................................................................46
2.5. Сравнение ...............................................................................................46
2.6. Смешанное сравнение ...........................................................................48
2.7. Логические операторы ...........................................................................49
2.8. Предложение switch ...............................................................................51

Содержание  7

2.9. Циклы while и do ....................................................................................51
2.10. Циклы for ..............................................................................................52

2.10.1. Классический цикл for ..................................................................52
2.10.2. Цикл for of  .....................................................................................53
2.10.3. Цикл for in ......................................................................................54

2.11. Break и continue ....................................................................................55
2.12. Перехват исключений ..........................................................................57
Упражнения ..................................................................................................58

Глава 3. Функции и функциональное программирование ....60
3.1. Объявление функций .............................................................................60
3.2. Функции высшего порядка ...................................................................61
3.3. Функциональные литералы ..................................................................62
3.4. Стрелочные функции .............................................................................63
3.5. Функциональная обработка массива ....................................................64
3.6. Замыкания ..............................................................................................65
3.7. Крепкие объекты ....................................................................................67
3.8. Строгий режим .......................................................................................69
3.9. Проверка типов аргументов ..................................................................70
3.10. Передача большего или меньшего числа аргументов .......................71
3.11. Аргументы по умолчанию ...................................................................72
3.12. Прочие параметры и оператор расширения ......................................73
3.13. Имитация именованных аргументов с помощью 
деструктуризации .........................................................................................74
3.14. Поднятие ...............................................................................................75
3.15. Возбуждение исключений ...................................................................77
3.16. Перехват исключений ..........................................................................78

3.17. Ветвь finally ...........................................................................................79
Упражнения ..................................................................................................80

Глава 4. Объектно-ориентированное программирование ....83
4.1. Методы ....................................................................................................83
4.2. Прототипы ..............................................................................................84
4.3. Конструкторы .........................................................................................87
4.4. Синтаксис классов .................................................................................88
4.5. Акцессоры чтения и записи ..................................................................89

4.6. Поля экземпляра и закрытые методы ..................................................90

4.7. Статические методы и поля ..................................................................91
4.8. Подклассы ...............................................................................................92
4.9. Переопределение методов ....................................................................94
4.10. Конструирование подкласса................................................................95
4.11. Классовые выражения .........................................................................95

 Содержание

4.12. Ссылка this ............................................................................................96
Упражнения ..................................................................................................99

Глава 5. Числа и даты .........................................................................102
5.1. Числовые литералы..............................................................................102
5.2. Форматирование чисел .......................................................................103
5.3. Разбор чисел .........................................................................................103
5.4. Функции и константы в классе Number..............................................104
5.5. Математические функции и константы .............................................105

5.6. Большие целые .....................................................................................106

5.7. Конструирование дат ...........................................................................107

5.8. Функции и методы класса Date ...........................................................110

5.9. Форматирование дат ...........................................................................111
Упражнения ................................................................................................111

Глава 6. Строки и регулярные выражения .................................114
6.1. Преобразование между строками и последовательностями 
кодовых точек .............................................................................................114
6.2. Подстроки .............................................................................................115
6.3. Прочие методы класса String ..............................................................116
6.4. Тегированные шаблонные литералы .................................................119

6.5. Простые шаблонные литералы ...........................................................120

6.6. Регулярные выражения .......................................................................121

6.7. Литеральные регулярные выражения ................................................124

6.8. Флаги .....................................................................................................125

6.9. Регулярные выражения и Юникод ......................................................126

6.10. Методы класса RegExp .......................................................................127

6.11. Группы ................................................................................................128

6.12. Методы класса String для работы с регулярными выражениями ...130

6.13. Еще о методе replace ..........................................................................132

6.14. Экзотические возможности ..............................................................133
Упражнения ................................................................................................134

Глава 7. Массивы и коллекции ........................................................137
7.1. Конструирование массива ...................................................................137
7.2. Свойство length и индексные свойства ..............................................138
7.3. Удаление и добавление элементов .....................................................139

Содержание  9

7.4. Прочие методы изменения массива ...................................................141
7.5. Порождение элементов .......................................................................143
7.6. Поиск элементов ..................................................................................144
7.7. Перебор всех элементов .......................................................................145
7.8. Разреженные массивы .........................................................................147

7.9. Редукция ...............................................................................................148

7.10. Отображения ......................................................................................151
7.11. Множества ...........................................................................................153

7.12. Слабые отображения и множества ....................................................154

7.13. Типизированные массивы .................................................................155

7.14. Буферные массивы .............................................................................157

Упражнения ................................................................................................158

Глава 8. Интернационализация ......................................................161

8.1. Понятие локали ....................................................................................161
8.2. Задание локали ....................................................................................162
8.3. Форматирование чисел .......................................................................164
8.4. Локализация даты и времени .............................................................166

8.4.1. Форматирование объектов Date ..................................................166
8.4.2. Диапазоны .....................................................................................167
8.4.3. Относительное время ...................................................................167
8.4.4. Форматирование с точностью до отдельных частей ..................168

8.5. Порядок следования ............................................................................168
8.6. Другие методы класса String, чувствительные к локали ...................170

8.7. Правила образования множественного числа и списков ..................171

8.8. Различные средства, относящиеся к локалям ...................................173

Упражнения ................................................................................................174

Глава 9. Асинхронное программирование .................................176

9.1. Конкурентные задачи в JavaScript ......................................................176
9.2. Создание обещаний .............................................................................179
9.3. Немедленно улаживаемые обещания ................................................181
9.4. Получение результата обещания ........................................................182
9.5. Сцепление обещаний ..........................................................................182
9.6. Обработка отвергнутых обещаний .....................................................184
9.7. Выполнение нескольких обещаний ....................................................185
9.8. Гонка нескольких обещаний ...............................................................186
9.9. Асинхронные функции ........................................................................187
9.10. Асинхронно возвращаемые значения ..............................................189
9.11. Конкурентное ожидание ...................................................................191
9.12. Исключения в асинхронных функциях ............................................191
Упражнения ................................................................................................192

 Содержание

Глава 10. Модули ..................................................................................196

10.1. Понятие модуля..................................................................................196
10.2. Модули в ECMAScript .........................................................................197
10.3. Импорт по умолчанию .......................................................................197
10.4. Именованный импорт .......................................................................198

10.5. Динамический импорт ......................................................................199

10.6. Экспорт ...............................................................................................200

10.6.1. Именованный экспорт ................................................................200
10.6.2. Экспорт по умолчанию ...............................................................201
10.6.3. Экспортируемые средства – это переменные ...........................202
10.6.4. Реэкспорт .....................................................................................202

10.7. Упаковка модулей ...............................................................................203
Упражнения ................................................................................................204

Глава 11. Метапрограммирование ................................................207

11.1. Символы .............................................................................................207
11.2. Настройка с помощью символьных свойств ....................................208

11.2.1. Настройка метода toString .........................................................209
11.2.2. Управление преобразованием типов ........................................210
11.2.3. Символ Species ............................................................................210

11.3. Атрибуты свойств ...............................................................................211
11.4. Перечисление свойств .......................................................................213
11.5. Проверка наличия свойства ..............................................................215
11.6. Защита объектов ................................................................................215
11.7. Создание и обновление объектов .....................................................216
11.8. Доступ к прототипу и его обновление ..............................................216
11.9. Клонирование объектов ....................................................................217
11.10. Свойства-функции ...........................................................................220
11.11. Привязка аргументов и вызов методов ..........................................221
11.12. Прокси ...............................................................................................222
11.13. Класс Reflect ......................................................................................224
11.14. Инварианты прокси .........................................................................226
Упражнения ................................................................................................228

Глава 12. Итераторы и генераторы ...............................................232

12.1. Итерируемые значения .....................................................................232
12.2. Реализация итерируемого объекта ...................................................233
12.3. Закрываемые итераторы ...................................................................235
12.4. Генераторы .........................................................................................236
12.5. Вложенное yield ..................................................................................238
12.6. Генераторы как потребители ............................................................240
12.7. Генераторы и асинхронная обработка ..............................................241
12.8. Асинхронные генераторы и итераторы ...........................................243
Упражнения ................................................................................................246

Содержание  11

Глава 13. Введение в TypeScript .....................................................249

13.1. Аннотации типов ...............................................................................250
13.2. Запуск TypeScript ...............................................................................251
13.3. Терминология, относящаяся к типам ...............................................252
13.4. Примитивные типы ...........................................................................253
13.5. Составные типы .................................................................................254
13.6. Выведение типа ..................................................................................256
13.7. Подтипы ..............................................................................................259

13.7.1. Правило подстановки .................................................................259
13.7.2. Факультативные и лишние свойства .........................................261
13.7.3. Вариантность типов массива и объекта .....................................262

13.8. Классы .................................................................................................263

13.8.1. Объявление классов ....................................................................263
13.8.2. Тип экземпляра класса ...............................................................264
13.8.3. Статический тип класса ..............................................................265

13.9. Структурная типизация .....................................................................266
13.10. Интерфейсы ......................................................................................267

13.11. Индексные свойства ........................................................................268

13.12. Более сложные параметры функций ..............................................269

13.12.1. Факультативные, подразумеваемые по умолчанию 
и прочие параметры...............................................................................269
13.12.2. Деструктуризация параметров ................................................270
13.12.3. Вариантность типа функции ....................................................271
13.12.4. Перегрузка .................................................................................273

13.13. Обобщенное программирование ....................................................275

13.13.1. Обобщенные классы и типы .....................................................275
13.13.2. Обобщенные функции ..............................................................276
13.13.3. Ограничения на типы ...............................................................277
13.13.4. Стирание ....................................................................................278
13.13.5. Вариантность обобщенных типов ...........................................279
13.13.6. Условные типы ..........................................................................280
13.13.7. Отображаемые типы .................................................................281

Упражнения ................................................................................................282

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

Предисловие

Опытные программисты, знакомые с такими языками, как Java, C#, C или C++, 
нередко оказываются в ситуации, когда необходимо поработать с JavaScript. 
Пользовательские интерфейсы все чаще размещаются в вебе, а JavaScript – 
язык, поддерживаемый всеми браузерами. Каркас Electron распространяет 
эту возможность на обогащенные клиентские приложения, и существует несколько решений для создания мобильных JavaScript-приложений. К тому же 
JavaScript все активнее проникает и в серверное программирование.

Много лет назад JavaScript задумывался как язык для «простенького про
граммирования», набор включенных в него средств приводил в замешательство и мог спровоцировать ошибки в больших программах. Однако предпринятые усилия по стандартизации и созданный инструментарий далеко 
превзошли первоначальные скромные задумки.

К сожалению, довольно трудно изучить современный JavaScript, не увязнув 

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

Именно эту проблему призвана решить данная книга. Я предполагаю, что 

читатель – знающий программист, который понимает, что такое ветвления, 
циклы, функции, структуры данных, и знаком с основами объектно-ориентированного программирования. Я объясню, что значит быть продуктивным программистом на современном JavaScript, лишь в скобках упоминая 
об ушедших в прошлое средствах. Вы узнаете, как поставить себе на службу 
современный JavaScript, избежав древних ловчих ям.

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

Проработав эту книгу, вы сумеете написать следующую версию своего 

приложения на современном JavaScript!

Пять золотых Правил

Держась подальше от немногих «классических» средств JavaScript, вы сможете заметно упростить себе освоение и использование языка. Возможно, 
прямо сейчас эти правила покажутся вам бессмысленными, но я все же приведу их, чтобы ссылаться в дальнейшем. И не пугайтесь – их совсем немного.

1.  При объявлении переменных употребляйте ключевые слова let или 

const, а не var.

2. Пользуйтесь строгим режимом.

Краткое содержание книги  13

3.  Обращайте внимание на типы и избегайте автоматического преобра
зования типов.

4.  Разберитесь, что такое прототипы, но для работы с классами, конструк
торами и методами применяйте современный синтаксис.

5. Не используйте ключевое слово this вне конструкторов и методов.
И еще одно метаправило: избегайте «что это?!» – фрагментов странного 

JavaScript-кода, сопровождаемых саркастическим «Что это?!». Некоторым 
доставляет удовольствие демонстрировать якобы ужасы JavaScript, анатомируя запутанный код. Я ни разу не почерпнул ничего полезного, спускаясь в эту кроличью нору. Зачем, к примеру, знать, что 2 * ['21'] равно 42, 
а 2 + ['40'] не равно, если золотое правило 3 призывает избегать преобразований типов? В общем случае, оказываясь в сбивающей с толку ситуации, 
я задаю себе вопрос, как избежать ее, а не как объяснить ее таинственные, 
но бесполезные детали.

Пути к Познанию

Работая над книгой, я старался помещать информацию туда, где вы сможете 
найти ее, когда понадобится. Но это необязательно самое подходящее место 
при первом прочтении книги. Чтобы помочь вам проложить собственный 
путь к познанию, я пометил каждую главу значком, обозначающим ее базовый уровень сложности. Разделы же, более сложные, чем глава в целом, 
помечены собственными значками. Вы можете без опаски пропускать такие 
разделы и возвращаться к ним, когда будете готовы воспринять материал.

Вот эти значки.

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

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

Чеширский кот обозначает тему повышенного уровня, от которой 
расплывется в улыбке лицо разработчика каркасов. Большинство 
прикладных программистов могут спокойно пропустить эти разделы.

Наконец, значок Безумного шляпника сопровождает сложную, 
способную свести с ума тему, предназначенную только для тех, кто 
одержим нездоровым любопытством.

краткое содержание книги

В главе 1 рассказывается об основных понятиях JavaScript: значениях и их 
типах, переменных и, самое важное, объектных литералах. В главе 2 описы
 Предисловие

вается поток управления. Если вы знакомы с Java, C# или C++, можете пролистать ее по диагонали. В главе 3 вы узнаете о функциях и функциональном 
программировании – вещи, крайне важной в JavaScript. Объектная модель 
в JavaScript сильно отличается от языков программирования, основанных 
на классах. Глава 4 посвящена деталям с упором на современный синтаксис. 
В главах 5 и 6 описаны библиотечные классы, которые чаще всего используются при работе с числами, датами, строками и регулярными выражениями. 
В основном это материал начального уровня, но встречаются разделы повышенного типа.

Следующие четыре главы посвящены темам промежуточного уров
ня. В главе 7 вы научитесь работать с массивами и другими коллекциями, 
имею щимися в стандартной библиотеке JavaScript. Если ваша программа 
рассчитана на пользователей со всего мира, то обратите особое внимание 
на вопросы интернационализации, которые освещаются в главе 8. Глава 9 
об асинхронном программировании чрезвычайно важна для всех программистов. Асинхронное программирование на JavaScript когда-то считалось 
весьма сложным предметом, но после включения в язык обещаний и ключевых слов async и await значительно упростилось. Теперь в JavaScript имеется 
стандартная система модулей, которая описывается в главе 10. Вы узнаете, 
как использовать модули, написанные другими программистами, и как создать свой собственный.

В главе 11 рассматривается метапрограммирование на повышенном уров
не. Читать ее имеет смысл, если вы собираетесь создать инструмент для 
анализа и преобразования произвольных JavaScript-объектов. В главе 12 
описание JavaScript завершается рассмотрением еще одной продвинутой 
темы: итераторов и генераторов – мощных механизмов, предназначенных 
для организации обхода коллекций и порождения произвольных последовательностей значений.

Наконец, имеется дополнительная глава 13, посвященная TypeScript. Type
Script – это надмножество JavaScript, добавляющее проверку типов на этапе 
компиляции. Не будучи частью стандартного JavaScript, эта надстройка очень 
популярна. Прочитайте эту главу и сами решите, к чему склоняетесь: к обычному JavaScript или к системе типов на этапе компиляции.

Цель данной книги – заложить прочные основы для уверенного использо
вания самого языка JavaScript. За информацией о постоянно изменяющихся 
инструментах и каркасах придется обратиться в другое место.

Почему я наПисал эту книгу

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

Есть немало учебников по основам JavaScript для непрофессиональных 

веб-разработчиков, но на таком уровне я его и так знал. Книга с носорогом

Благодарности  15

Флэнагана1 была чудом в 1996 году, но теперь нагружает читателей слишком 
большим наследием прошлого. Книга Крокфорда «JavaScript: The Good Parts»2

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

Разумеется, веб кишит блогами на тему JavaScript разного качества – одни 

содержат точную и систематическую информацию, другие – просто случайный набор фактов. На мой взгляд, просеивать веб-блоги и оценивать степень 
их достоверности – занятие не слишком эффективное. Как ни странно, я не 
смог найти ни одной книги для миллионов программистов, которые знают 
Java или другой подобный язык и хотят изучить JavaScript в его современном 
виде, не обремененном историческим багажом.

Поэтому мне пришлось написать ее самому.

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

Я хотел бы еще раз поблагодарить своего редактора Грега Денча (Greg Doench) 
за поддержку этого проекта, а также Дмитрия и Алину Кирсановых за корректуру и верстку книги. Отдельное спасибо рецензентам Гэйлу Андерсону (Gail
Anderson), Тому Остину (Tom Austin), Скотту Дэвису (Scott Davis), Скотту Гуду 
(Scott Good), Кито Манну (Kito Mann), Бобу Николсону (Bob Nicholson), Рону 
Маку (Ron Mak) и Генри Тремблею (Henri Tremblay), которые исправно указали на ошибки и внесли продуманные предложения по улучшению книги.

Кэй Хорстманн

Берлин

Март 2020

1
David Flanagan. JavaScript: The Definitive Guide. Sixth Edition (O’Reilly Media, 2011).

2 Вышла в издательстве O’Reilly Media в 2008 году.

Об авторе

Кэй С. Хорстманн – главный автор книг «Core Java™», т. I и II, 11-е изд. (Pearson, 2018), «Scala for the Impatient», 2-е изд. (Addison-Wesley, 2016) и «Core Java
SE 9 for the Impatient» (Addison-Wesley, 2017). Кэй – заслуженный профессор 
информатики в университете Сан-Хосе, пропагандист Java, часто выступает 
на конференциях по компьютерной тематике.

Доступ онлайн
899 ₽
В корзину