Современный JavaScript для нетерпеливых
Покупка
Тематика:
Программирование на Java
Издательство:
ДМК Пресс
Автор:
Хорстманн Кей С.
Год издания: 2021
Кол-во страниц: 288
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-97060-177-8
Артикул: 751472.01.99
Доступ онлайн
В корзину
Язык JavaScript изначально был предназначен для написания небольших объемов кода внутри браузера, но современный JavaScript радикально отличается от своего прародителя. В наши дни программисты на JavaScript активно
осваивают функциональный, объектно-ориентированный и асинхронный стили программирования, оставляя в прошлом архаичные конструкции, чреватые ошибками. Данная книга - полное, но при этом лаконичное руководство по версии JavaScript E6 и выше. Вам не потребуется знаний старых версий языка, а сразу предлагается начать с более мощных современных.
Автор бестселлеров Кэй С. Хорстман рассказывает обо всем, что вам необходимо знать, излагая материал небольшими порциями, рассчитанными на легкое усвоение. Практические советы и примеры кода помогут эффективно воспользоваться всеми новшествами, избежать подводных камней и устаревших средств и извлечь максимум пользы из надежных инструментов и фреймворков для разработки ПО на современном JavaScript.
Издание предназначено прежде всего программистам, владеющих такими языками, как Java, C#, C, или C++.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
- ВО - Магистратура
- 09.04.01: Информатика и вычислительная техника
- 09.04.02: Информационные системы и технологии
- 09.04.03: Прикладная информатика
- 09.04.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Кэй С. Хорстман Современный 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, часто выступает на конференциях по компьютерной тематике.
Доступ онлайн
В корзину