LibCoder

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

1C Agda JavaScript
Новые возможности JavaScript: Как написать чистый код по всем правилам современного языка
Дата выхода: 2020
Издательство: Эксмо
Количество страниц: 634
Размер файла: 3,4 МБ
Тип файла: PDF
Добавил: LibCoder
Оглавление
Оглавление....6 Intro....20 Об авторе....20 О техническом редакторе....21 О техническом корректоре....21 Благодарности....22 Введение....23 О чем эта книга?....23 Кому стоит читать эту книгу....25 Как пользоваться этой книгой....25 1. Новые возможности в ES2015-ES2020 и далее....27 Определения, что есть что и терминология....28 Что такое Ecma? ECMAScript? TC39?....28 Что такое ES6? ES7? ES2015? ES2020?....28 «Движки» JavaScript, браузеры и др....29 Что за «новые возможности»?....30 Как создаются новые возможности?....32 Кто здесь главный....32 Процесс....33 Вовлечение в процесс....35 Следите за новыми возможностями....36 Использование текущих функций во вчерашних условиях и разрабатываемых возможностей сегодня....37 Транспилирование примера с помощью Babel....38 Обзор главы....42 2. Объявления блочной области видимости для let и const....44 Введение в let и const....45 Истинная блочная область видимости....45 Повторные объявления — это ошибка....46 Поднятие и временная мертвая зона....47 Новый вид глобальных переменных....50 Const: Константы в JavaScript....52 Основы const....52 Объекты, на которые ссылается const, по-прежнему изменяемы....53 Блочная область видимости в циклах....54 Проблема «замыканий в циклах»....55 Привязки: Как работают переменные, константы и другие идентификаторы....56 Циклы while и do-while....61 Последствия для производительности....62 Константа в блоках цикла....63 Константа в циклах for-in....64 От старых привычек к новым....65 Используйте const или let вместо var....65 Сохраняйте узкую область видимости переменных....65 Используйте блочную область видимости вместо встроенных анонимных функций....65 3. Функции....67 Стрелочные функции и лексические this, super и т. д....68 Синтаксис стрелочной функции....68 Стрелочные функции и лексические this....73 Стрелочные функции не могут быть конструкторами....73 Значения параметров по умолчанию....74 Значения по умолчанию — это выражения....76 Значения по умолчанию вычисляются в их собственной области видимости....77 Значения по умолчанию не увеличивают арность функции....79 Остаточные параметры....79 Висящие запятые в списках параметров и вызовах функций....81 Свойство имени функции....83 Объявления функций внутри блоков....84 Объявления функций внутри блоков: Стандартная семантика....86 Объявления функций внутри блоков: Устаревшая веб-семантика....88 От старых привычек к новым....90 Используйте стрелочные функции вместо различных обходных путей для этого значения....90 Используйте стрелочные функции для обратных вызовов, если не используете аргументы или this....91 Рассмотрите применение стрелочных функций и в других местах....91 Не используйте стрелочные функции, когда вызывающей стороне необходимо контролировать значение this....92 Используйте значения параметров по умолчанию, а не код, предоставляющий значения по умолчанию....93 Используйте остаточный параметр вместо ключевого слова arguments....93 Рассмотрите возможность использования висящих запятых, если это оправдано....93 4. Классы....95 Что такое класс?....96 Представление нового синтаксиса класса....96 Добавление конструктора....98 Добавление свойств экземпляра....100 Добавление метода прототипа....100 Добавление статического метода....102 Добавление свойства- акцессора....103 Вычисляемые имена методов....105 Сравнение с устаревшим синтаксисом....105 Создание подклассов....108 Ключевое слово super....111 Написание конструкторов подклассов....112 Наследование свойств и методов прототипа суперкласса и доступ к ним....113 Наследование статических методов....117 Ключевое слово super в статических методах....118 Методы, возвращающие новые экземпляры....119 Создание подклассов для встроенных компонентов....124 Где доступен super....125 Отказ от Object.prototype....129 Синтаксис new.target....129 Объявления классов в сравнении с выражениями классов....133 Объявления классов....133 Выражения классов....134 Еще не все....135 От старых привычек к новым....135 Использование класса при создании функций конструктора....135 5. Объекты....137 Вычисляемые имена свойств....137 Стенография свойств....138 Получение и настройка прототипа объекта....139 Метод Object.setPrototypeOf....139 Свойство __proto__ в браузерах....140 Буквальное указание имени свойства __proto__ в браузерах....141 Синтаксис метода и применение super вне классов....141 Тип данных Symbol....144 Почему же символы?....145 Создание и использование символов....146 Символы не для конфиденциальности....147 Глобальные символы....148 Хорошо известные символы....152 Новые функции объектов....153 Метод Object.assign....153 Метод Object.is....154 Метод Object.values....155 Метод Object.entries....155 Метод Object.fromEntries....156 Функция Object.getOwnPropertySymbols....156 Метод Object.getOwnPropertyDescriptors....156 Метод Symbol.toPrimitive....157 Порядок свойств....159 Синтаксис расширения свойств....161 От старых привычек к новым....162 Использовать вычисляемый синтаксис при создании свойств с динамическими именами....162 Используйте сокращенный синтаксис при инициализации свойства из переменной с тем же именем....163 Используйте метод Object.assign вместо пользовательских функций «extend» или явного копирования всех свойств....163 Используйте синтаксис расширения при создании нового объекта на основе свойств существующего объекта....163 Используйте символ, чтобы избежать коллизии имен....163 Используйте методы Object.getPrototypeOf/setPrototypeOf вместо свойства __proto....164 Используйте синтаксис метода для методов....164 6. Возможности итерации: итерируемые объекты, итераторы, циклы for-of, итеративные расширения, генераторы....165 Итерируемые объекты, итераторы, циклы for-of, итерируемое расширение....165 Итераторы и итерируемые объекты....166 Цикл for-of: Неявное использование итератора....166 Явное использование итератора....168 Остановка итерации на ранней стадии....169 Прототип итератора объекта....170 Сделать что-либо итерируемым объектом....173 Итерируемые итераторы....177 Синтаксис итеративного расширения....179 Итераторы, цикл for-of и DOM....180 Функции- генераторы....182 Базовая функция-генератор, просто производящая значения....183 Использование функций- генераторов для создания итераторов....184 Функции- генераторы в качестве методов....186 Использование генератора напрямую....187 Потребление значений генераторами....187 Использование оператора return в функции- генераторе....191 Приоритет оператора yield....192 Методы return и throw: Завершение работы генератора....193 Остановка генератора или итеративного объекта: yield....195 От старых привычек к новым....200 Используйте конструкции с итеративными элементами....200 Используйте возможности итеративных коллекций DOM....201 Используйте интерфейсы итераторов и итеративных объектов....201 Используйте синтаксис итеративного расширения в большинстве мест, где вы применяли Function.prototype.apply....201 Используйте генераторы....202 7. Деструктуризация....203 Краткий обзор....203 Базовая деструктуризация объекта....204 Базовая (и итеративная) деструктуризация массива....207 Значения по умолчанию....209 Синтаксис Rest в шаблонах деструктуризации....211 Использование отличающихся имен....212 Вычисляемые имена свойств....214 Вложенная деструктуризация....214 Деструктуризация параметров....215 Деструктуризация в циклах....218 От старых привычек к новым....219 Используйте деструктуризацию при получении только некоторых свойств от объекта....219 Используйте деструктуризацию для объектов options....220 8. Объекты Promise....221 Почему же промисы?....221 Основы промисов....222 Краткий обзор....222 Пример....224 Промисы и элементы thenable....226 Использование существующего промиса....227 Метод then....227 Связывание промисов в цепочки....228 Сравнение с обратными вызовами....232 Метод catch....233 Метод finally....235 Метод throw в обработчиках then, catch и finally....239 Метод then с двумя аргументами....241 Добавление обработчиков к уже выполненным промисам....243 Создание промисов....244 Конструктор Promise....245 Метод Promise.resolve....248 Метод Promise.reject....249 Другие служебные методы промисов....250 Метод Promise.all....250 Метод Promise.race....252 Метод Promise.allSettled....252 Метод Promise.any....253 Шаблоны промисов....253 Обрабатывать ошибки или возвращать промис....253 Серии промисов....254 Параллельные промисы....256 Антишаблоны промисов....257 Излишнее выражение new Promise(/*…*/)....257 Отсутствие обработки ошибок (или неправильная обработка)....257 Оставление ошибок незамеченными при преобразовании API обратного вызова....258 Неявное преобразование отклонения в успешное выполнение....259 Попытка использовать результаты вне цепочки....260 Использование обработчиков бездействия....260 Неправильное разветвление цепочки....261 Подклассы промисов....262 От старых привычек к новым....263 Используйте промисы вместо успешных/неудачных обратных вызовов....263 9. Асинхронные функции, итераторы и генераторы....264 Асинхронные функции....264 Создание промисов асинхронными функциями....267 Оператор await использует промисы....268 Стандартная логика становится асинхронной при использовании await....269 Отклонения — это исключения, исключения — это отклонения; выполнение — это результаты, возвращаемые значения — это разрешения....270 Параллельные операции в асинхронных функциях....273 Нет необходимости возвращать await....274 Ловушка Pitfall: Использование асинхронной функции в неожиданном месте....275 Асинхронные итераторы, итерируемые и генераторы....276 Асинхронные итераторы....276 Асинхронные генераторы....280 Выражение for-await-of....282 От старых привычек к новым....283 Используйте асинхронные функции и await вместо явных промисов и then/catch....283 10. Шаблоны, помеченные функции и новые возможности строк....284 Шаблонные литералы....284 Базовая функциональность (Непомеченные шаблонные литералы)....285 Помеченные шаблонные функции (Помеченные шаблонные литералы)....287 Метод String.raw....292 Повторное использование шаблонных литералов....294 Шаблонные литералы и автоматическая вставка точки с запятой....294 Улучшенная поддержка Юникода....294 Юникод, а что такое строка JavaScript?....295 Экранирующая последовательность кодовой точки....297 Метод String.fromCodePoint....297 Метод String.prototype.codePointAt....297 Метод String.prototype.normalize....298 Итерация....300 Новые строковые методы....301 Метод String.prototype.repeat....301 Методы String.prototype.startsWith и String.prototype.endsWith....302 Метод String.prototype.includes....303 Методы String.prototype.padStart и String.prototype.padEnd....303 Методы String.prototype.trimStart и String.prototype.trimEnd....304 Обновления методов match, split, search и replace....304 От старых привычек к новым....306 Используйте шаблонные литералы вместо конкатенации строк (где это уместно)....306 Используйте помеченные функции и шаблонные литералы для DSL вместо пользовательских механизмов заполнения....307 Используйте строковые итераторы....307 11. Массивы....308 Новые методы массивов....308 Метод Array.of....308 Метод Array.from....309 Метод Array.prototype.keys....312 Метод Array.prototype.values....313 Метод Array.prototype.entries....314 Метод Array.prototype.copyWithin....315 Метод Array.prototype.find....318 Метод Array.prototype.findIndex....319 Метод Array.prototype.fill....319 Общая ловушка Pitfall: Использование объекта в качестве значения заполнения....320 Метод Array.prototype.includes....321 Метод Array.prototype.flat....321 Метод Array.prototype.flatMap....323 Итерация, расширение, деструктуризация....323 Стабильная сортировка массива....323 Типизированные массивы....324 Краткий обзор....324 Основное использование....327 Подробнее о преобразовании значений....328 Объект ArrayBuffer: Хранилище для типизированных массивов....330 Порядковый номер (Порядок байтов)....333 Вид DataView: Необработанный доступ к буферу....334 Совместное использование ArrayBuffer массивами....336 Совместное использование без перекрытия....336 Совместное использование с перекрытием....337 Подклассы типизированных массивов....338 Методы типизированного массива....338 Стандартные методы массива....338 Метод %TypedArray%.prototype.set....340 Метод %TypedArray%.prototype.subarray....340 От старых привычек к новым....341 Используйте find и findIndex для поиска в массивах вместо циклов (где это уместно)....341 Используйте для заполнения массивов Array.fill, а не циклы....341 Используйте readAsArrayBuffer вместо readAsBinaryString....342 12. Карты и множества....343 Коллекции Map или карты....343 Основные операции с картой....344 Равенство ключей....346 Создание карт из итерируемых....347 Итерация содержимого карты....348 Создание подклассов для карты....350 Производительность....351 Множества....351 Основные операции с множеством....352 Создание множеств из итерируемых....353 Итерация содержимого множества....353 Создание подклассов для множества....355 Производительность....355 Слабые карты (WeakMap)....356 Слабые карты не итерируемые....356 Варианты использования и примеры....356 Вариант использования: Закрытая информация....357 Вариант использования: Хранение информации для объектов, находящихся вне вашего контроля....358 Значения, ссылающиеся на ключ....360 Слабые множества (WeakSet)....365 Вариант использования: Отслеживание....366 Вариант использования: Маркировка....367 От старых привычек к новым....368 Используйте карты вместо объектов для карт общего назначения....368 Используйте множества вместо объектов для множеств....368 Используйте слабые карты для хранения личных данных вместо публичных свойств....369 13. Модули....371 Введение в модули....371 Основы модулей....372 Спецификатор модуля....374 Базовый именованный экспорт....375 Экспорт по умолчанию....377 Использование модулей в браузерах....379 Скрипты модуля не задерживают синтаксический анализ....380 Атрибут nomodule....380 Спецификаторы модулей в Интернете....381 Использование модулей в Node.js....382 Спецификаторы модулей в Node.js....384 Node.js добавляет дополнительные возможности модулей....385 Переименование экспорта....385 Повторный экспорт экспорта из другого модуля....386 Переименование импорта....387 Импорт объекта пространства имен модуля....388 Экспорт объекта пространства имен другого модуля....389 Импорт модуля только из-за побочных эффектов....390 Импорт и экспорт записей....390 Импорт записей....390 Экспорт записей....391 Импорт в режиме реального времени и доступности только для чтения....393 Экземпляры модуля зависят от базы realm....396 Как загружаются модули....396 Получение и синтаксический анализ....398 Создание экземпляра....401 Выполнение....402 Обзор временной мертвой зоны (TDZ)....402 Циклические зависимости и TDZ....403 Обзор синтаксиса импорта/экспорта....404 Разновидности экспорта....404 Разновидности импорта....406 Динамический импорт....407 Динамический импорт модуля....407 Пример динамического модуля....409 Динамический импорт в немодульных скриптах....412 Встряхивание дерева....414 Бандлинг (Объединение)....416 Метаданные импорта....416 Модули воркеров....417 Загрузка веб-воркера в качестве модуля....417 Загрузка воркера Node.js в качестве модуля....418 Воркер находится в собственной базе realm....418 От старых привычек к новым....419 Используйте модули вместо псевдо пространств имен....419 Используйте модули вместо обертывания кода в функции области видимости....420 Используйте модули, чтобы избежать создания мегалитических файлов кода....420 Конвертируйте CJS, AMD и другие модули в ESM....420 Не изобретайте велосипед, используйте хорошо обслуживаемый бандлер....420 14. Рефлексия - объекты Reflect и Proxy....421 Объект Reflect....421 Метод Reflect.apply....423 Метод Reflect.construct....423 Метод Reflect.ownKeys....425 Методы Reflect.get и Reflect.set....425 Другие функции Reflect....427 Объект Proxy....427 Пример: Регистрирующий прокси....431 Ловушки прокси....438 Общие возможности....438 Ловушка apply....439 Ловушка construct....439 Ловушка defineProperty....439 Ловушка deleteProperty....441 Ловушка get....442 Ловушка getOwnPropertyDescriptor....443 Ловушка getPrototypeOf....444 Ловушка has....445 Ловушка isExtensible....445 Ловушка ownKeys....445 Ловушка preventExtensions....446 Ловушка set....447 Ловушка setPrototypeOf....447 Пример: Скрытие свойств....448 Отключаемые прокси....452 От старых привычек к новым....452 Используйте прокси, а не полагайтесь на потребляющий код, чтобы не изменять объекты API....453 Используйте прокси для отделения кода реализации от инструментального кода....453 15. Обновления регулярных выражений....454 Свойство flags....454 Новые флаги....455 Липкий флаг (y)....455 Флаг Юникода (u)....456 Флаг «все точки» (s)....456 Именованные группы захвата....457 Основная функциональность....457 Обратные ссылки....461 Заменяющие токены....462 Утверждения ретроспективной проверки....462 Позитивная ретроспективная проверка....463 Негативная ретроспективная проверка....464 Жадность проявляется в принципе справа налево в ретроспективных проверках....464 Ссылки и нумерация групп захвата....465 Функциональные возможности Юникода....466 Экранирование кодовой точки....466 Экранирование свойства Юникода....467 От старых привычек к новым....471 Используйте липкий флаг (y) вместо создания подстрок и использования «^» при синтаксическом анализе....471 Используйте флаг «все точки» (s) вместо использования обходных путей для сопоставления всех символов (включая разрывы строк)....472 Используйте именованные группы захвата вместо анонимных....472 Используйте ретроспективные проверки вместо различных обходных путей....473 Используйте экранирование кодовой точки вместо суррогатных пар в регулярных выражениях....473 Используйте шаблоны Юникода вместо обходных путей....473 16. Совместно используемая память....474 Введение....474 Здесь водятся драконы!....475 Поддержка браузера....476 Основы совместно используемой памяти....477 Критические секции, блокировки и условные переменные....478 Создание совместно используемой памяти....479 Совместно используется память, но не объекты....484 Условия гонки, вышедшие из строя хранилища, устаревшие значения, значения с разрывами, тиринг и многое другое....485 Объект Atomics....487 Низкоуровневые возможности объекта Atomics....490 Использование Atomics для приостановки и возобновления потоков....492 Пример совместно используемой памяти....493 Здесь водятся драконы! (Снова)....514 От старых привычек к новым....520 Используйте совместно используемые блоки вместо многократного обмена большими блоками данных....520 Используйте Atomics.wait и Atomics.notify вместо разделения заданий воркеров для поддержки цикла событий (при необходимости)....520 17. Различные аспекты....521 Тип данных BigInt....521 Создание значения типа BigInt....523 Явное и неявное преобразование....524 Производительность....525 Массивы BigInt64Array и BigUint64Array....525 Служебные функции....525 Новые целочисленные литералы....526 Двоичные целочисленные литералы....526 Восьмеричные целочисленные литералы, попытка № 2....527 Новые математические методы....528 Общие математические функции....528 Поддержка низкоуровневых математических функций....529 Оператор возведения в степень (**)....529 Изменения в Date.prototype.toString....531 Изменения в Function.prototype.toString....532 Дополнения конструктора Number....532 «Безопасные» целые числа....532 Константы Number.MAX_SAFE_INTEGER и Number.MIN_SAFE_INTEGER....533 Метод Number.isSafeInteger....534 Метод Number.isInteger....534 Методы Number.isFinite и Number.isNaN....534 Методы Number.parseInt и Number.parseFloat....535 Свойство Number.EPSILON....535 Символ Symbol.isConcatSpreadable....535 Различные хитрости синтаксиса....536 Оператор нулевого слияния....537 Опциональная цепочка....537 Необязательные привязки catch....540 Разрывы строк Юникода в JSON....540 Правильно сформированный JSON из метода JSON.stringify....540 Различные стандартные библиотеки/глобальные дополнения....541 Метод Symbol.hasInstance....541 Свойство Symbol.unscopables....541 Объект globalThis....543 Свойство description символа....543 Метод String.prototype.matchAll....544 Приложение Б: Возможности, доступные только для браузера....544 HTML-подобные комментарии....545 Хитрости регулярного выражения....546 Расширение управляющего символа экранирования (\cX)....546 Допуск недопустимых последовательностей....547 Метод RegExp.prototype.compile....547 Дополнительные встроенные свойства....547 Дополнительные свойства объекта....548 Дополнительные строковые методы....549 Различные фрагменты свободного или неясного синтаксиса....549 Когда же document.all есть… или нет?....551 Оптимизация хвостового вызова....552 От старых привычек к новым....555 Используйте двоичные литералы....555 Используйте новые математические функции вместо различных математических обходных путей....556 Используйте оператор нулевого слияния для значений по умолчанию....556 Используйте опциональную цепочку вместо проверок....556 Уберите привязку ошибки (e) из “catch (e)”, если она не используется....556 Используйте оператор возведения в степень (**) вместо метода Math.pow....557 18. Грядущие функциональные возможности класса....558 Публичные и приватные поля класса, методы и акцессоры....558 Определения публичного поля (свойства)....559 Приватные поля....565 Приватные методы и акцессоры экземпляра....572 Приватные методы....572 Приватные акцессоры....577 Публичные статические поля, приватные статические поля и приватные статические методы....578 Публичные статические поля....578 Приватные статические поля....579 Приватные статические методы....579 От старых привычек к новым....580 Используйте определения свойств вместо создания свойств в конструкторе (где это уместно)....580 Используйте приватные поля вместо префиксов (где это уместно)....581 Используйте приватные методы вместо функций вне класса для приватных операций....581 19. Взгляд в будущее....584 Оператор await верхнего уровня....585 Обзор и примеры использования....585 Пример....587 Обработка ошибок....592 Слабые ссылки и обратные вызовы очистки....593 Слабые ссылки....594 Обратные вызовы очистки....597 Индексы соответствия RegExp....602 Метод String.prototype.replaceall....604 Выражение Atomics.asyncWait....605 Различные хитрости синтаксиса....606 Числовые разделители....606 Поддержка Hashbang....607 Осуждаемые устаревшие возможности RegExp....607 Спасибо, что прочитали!....608 Приложение. Фантастические возможности и где они обитают....609 Функциональные возможности в алфавитном порядке....609 Новые положения....615 Новый синтаксис, ключевые слова, операторы, циклы и тому подобное....616 Новые литеральные формы....618 Дополнения и изменения стандартной библиотеки....618 Прочее....621 Алфавитный указатель....622

Описание

Коротко и по делу о том, что важно знать про javascript.

Руководство по JavaScript для тех, кто хочет кодить оперативно и эффективно.

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

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

 Благодаря ей вы узнаете:чем последние версии JS отличаются друг от друга;как расширился функционал объектов в коде;что нового могут предложить функции;как использовать современный синтаксис языка;какими будут дальнейшие улучшения JS.Это не академическая книга для экспертов в программировании. Это практическая книга для обычных разработчиков на JavaScript, желающих развивать свои навыки программирования и идти в ногу со временем.

На этом основные моменты по теме закрыты.

javascript новые возможности языка последние книга всем хочет

Частые вопросы

Можно ли скачать «Новые возможности JavaScript: Как написать чистый код по всем правилам современного языка» бесплатно?

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

В каком формате и какого размера файл?

Книга предоставляется в формате PDF, размер файла 3,4 МБ.

Кто автор и когда вышла книга?

автор — Краудер Ти Джей, издательство Эксмо, год выпуска 2020, 634 страниц.

О чём книга «Новые возможности JavaScript: Как написать чистый код по всем правилам современного языка»?

Руководство по JavaScript для тех, кто хочет кодить быстро и эффективно."Новые возможности JavaScript" – это сборник правил написания кода на современном языке JavaScript.

Похожие материалы