https://habrahabr.ru/company/piter/blog/327730/- Профессиональная литература
- Программирование
- JavaScript
- Блог компании Издательский дом «Питер»
Познакомьтесь с радикальными изменениями в языке JavaScript, которые произошли благодаря новому стандарту ECMAScript 6. Николас Закас — автор бестселлеров и эксперт-разработчик — создал самое полное руководство по новым типам объектов, синтаксису и интересным функциям. Каждая глава содержит примеры программ, которые будут работать в любой среде JavaScript и познакомят вас с новыми возможностями языка. Прочитав эту книгу, вы узнаете о том, чем полезны итераторы и генераторы, чем ссылочные функции отличаются от обычных, какие дополнительные опции позволяют работать с данными, о наследовании типов, об асинхронном программировании, о том, как модули меняют способ организации кода, и многом другом.
Более того, Николас Закас заглядывает в изменения, которые появились в ECMAScript 7. Неважно, являетесь вы веб-разработчиком или работаете с node.js, в этой книге вы найдете самую необходимую информацию, позволяющую эффективно использовать все возможности ECMAScript 6.
Кому адресована книга
Эта книга задумывалась как руководство для тех, кто уже знаком с JavaScript и ECMAScript 5. Хотя глубокое знание языка не является обязательным условием для работы с этой книгой, однако оно поможет вам понять различия между ECMAScript 5 и 6. В частности, эта книга адресована разработчикам на JavaScript с опытом программирования сценариев для браузеров или Node.js, желающим узнать о последних нововведениях, появившихся в языке.
Эта книга точно не для начинающих, никогда не писавших на JavaScript. Для чтения этой книги необходимо хорошо знать хотя бы основы языка.
Обзор содержания
Все главы и приложения в этой книге охватывают разные аспекты ECMAScript 6. Многие главы начинаются с обсуждения проблем, на решение которых направлены изменения в ECMAScript 6, чтобы вы получили более широкое представление об этих изменениях. Все главы включают примеры программного кода, демонстрирующие новые идеи и синтаксические конструкции.
• В главе 1 «Блочные привязки» рассказывается об операторах let и const, замещающих оператор var на уровне блоков.
• Глава 2 «Строки и регулярные выражения» охватывает дополнительные строковые функции, а также знакомит с шаблонными строками.
• В главе 3 «Функции» обсуждаются различные изменения, коснувшиеся функций, включая стрелочные функции, параметры со значениями по умолчанию, остаточные параметры и некоторые другие особенности.
• В главе 4 «Расширенные возможности объектов» разъясняются изменения в подходах к созданию, изменению и использованию объектов. В числе рассматриваемых тем изменения в синтаксисе литералов объектов и новые методы рефлексии.
• Глава 5 «Деструктуризация для упрощения доступа к данным» знакомит с синтаксисом деструктуризации объектов и массивов, позволяющим расчленять объекты и массивы, используя компактный синтаксис.
• Глава 6 «Символы и символьные свойства» знакомит с идеей символов — новым способом определения свойств. Символы — это новый простой тип данных, который можно использовать для сокрытия (хотя и не полного) свойств и методов объектов.
• В главе 7 «Множества и ассоциативные массивы» описываются новые типы коллекций: Set, WeakSet, Map и WeakMap. Эти типы добавляют в обычные массивы гарантию уникальности значений и средства управления памятью, спроектированные специально для JavaScript.
• В главе 8 «Итераторы и генераторы» обсуждается добавление в язык итераторов и генераторов. Эти инструменты открывают новые мощные способы работы с коллекциями данных, недоступные в предыдущих версиях JavaScript.
• Глава 9 «Введение в классы JavaScript» знакомит с первым формализованным понятием классов в JavaScript. Объектно-ориентированная модель в JavaScript часто вызывает путаницу у программистов, перешедших из других языков. Новый дополнительный синтаксис для работы с классами делает JavaScript более доступным для других и выразительным для энтузиастов.
• В главе 10 «Расширенные возможности массивов» описываются изменения, коснувшиеся обычных массивов, и новые способы их использования в JavaScript.
• Глава 11 «Объект Promise и асинхронное программирование» знакомит с объектами асинхронных вычислений (Promise) — новым элементом языка. Объекты асинхронных вычислений явились результатом массовых усилий и быстро завоевали популярность благодаря обширной поддержке в библиотеках. Спецификация ECMAScript 6 формализовала эти объекты и сделала их доступными по умолчанию.
• Глава 12 «Прокси-объекты и Reflection API» знакомит с прикладным интерфейсом рефлексии в JavaScript и новыми прокси-объектами, позволяющими перехватывать любые операции с объектом. Прокси-объекты дают разработчикам беспрецедентный контроль над объектами и, как следствие, неограниченные возможности для определения новых шаблонов взаимодействий.
• В главе 13 «Инкапсуляция кода в модули» описывается официальный формат модулей для JavaScript. Его цель состоит в том, чтобы заменить многочисленные нестандартные форматы определения модулей, появившиеся за годы существования языка.
• Приложение A «Мелкие изменения в ECMAScript 6» охватывает прочие изменения в ECMAScript 6, редко используемые или не связанные с более крупными изменениями, описанными в предыдущих главах.
• В приложении Б «Введение в ECMAScript 7 (2016)» описываются три дополнения к стандарту, включенные в редакцию ECMAScript 7, которая не оказывает такого существенного влияния на JavaScript, как ECMAScript 6.
Работа над ECMAScript 6 заняла несколько лет, и в результате в техническом комитете TC-39 пришли к выводу, что такая продолжительность процесса разработки совершенно неприемлема. Поэтому было решено перейти на годовой цикл выпуска изменений, чтобы гарантировать более быстрое внедрение в язык новых особенностей.
Более частые выпуски подразумевают меньшее количество нововведений в каждой последующей редакции ECMAScript, чем в ECMAScript 6. Чтобы обозначить переход на новый цикл, новые версии спецификации решено нумеровать не номером редакции, а номером года публикации. В результате редакция ECMAScript 6 теперь также известна как ECMAScript 2015, а ECMAScript 7 формально называется ECMAScript 2016. Комитет TC-39 предполагает использовать систему именования с номером года во всех будущих редакциях ECMAScript.
Работа над редакцией ECMAScript 2016 была завершена в марте 2016 года и включает только три дополнения к языку: новый математический оператор, новый метод массивов и новую синтаксическую ошибку. Все три новшества рассматриваются далее в этом приложении.
Оператор возведения в степень
Единственным изменением в синтаксисе JavaScript, предусмотренным в ECMAScript 2016, является
оператор возведения в степень, выполняющий одноименную математическую операцию. В JavaScript уже имеется метод
Math.pow(), выполняющий возведение в степень, но JavaScript оставался одним из немногих языков, требующих использования метода вместо формального оператора. Кроме того, некоторые разработчики утверждают, что оператор проще читается в коде.
Оператор возведения в степень имеет форму двух звездочек (**): левый операнд используется как основание, а правый — как степень. Например:
let result = 5 ** 2;
console.log(result); // 25
console.log(result === Math.pow(5, 2)); // true
Этот пример вычисляет выражение 5 во второй степени, результат которого равен 25. При желании те же вычисления все еще можно выполнять с помощью метода
Math.pow().
Порядок операций
Оператор возведения в степень имеет высший приоритет из всех двухместных операторов в JavaScript (унарные операторы имеют более высокий приоритет, чем **). Это означает, что он выполняется первым в любом сложном выражении, например:
let result = 2 * 5 ** 2;
console.log(result); // 50
Здесь сначала будет найден результат 5 во второй степени, затем полученное значение умножается на 2. Конечный результат получится равным 50.
Ограничения операндов
Оператор возведения в степень накладывает некоторые необычные ограничения, отсутствующие в других операторах. Левый операнд не может быть выражением с унарным оператором, кроме ++ и --. Например, следующий пример вызовет синтаксическую ошибку:
// синтаксическая ошибка
let result = -5 ** 2;
Выражение -5 в данном примере расценивается как синтаксическая ошибка, потому что возникает неоднозначность в определении порядка выполнения операций. Должен ли унарный оператор — применяться к числу 5 или к результату выражения 5 ** 2? Запрет использования унарных выражений слева от оператора возведения в степень устраняет эту неоднозначность. Чтобы ясно обозначить свои намерения, следует заключить в круглые скобки -5 или 5 ** 2, как показано ниже:
// правильно
let result1 = -(5 ** 2); // результат равен -25
// тоже правильно
let result2 = (-5) ** 2; // результат равен 25
Если заключить в круглые скобки выражение, унарный оператор — будет применен ко всему выражению. Если заключить в круглые скобки -5, интерпретатор поймет, что во вторую степень требуется возвести число —5.
Выражения с операторами ++ и — слева от оператора возведения в степень не требуется заключать в скобки, потому что поведение обоих операторов ясно определено как направленное на их операнды. Префиксный оператор ++ или — изменяет свой операнд перед выполнением любой другой операции, а постфиксные версии ничего не изменяют, пока все выражение не будет вычислено. В обоих случаях эти операторы не вызывают ошибок при использовании слева от оператора возведения в степень, например:
let num1 = 2,
num2 = 2;
console.log(++num1 ** 2); // 9
console.log(num1); // 3
console.log(num2-- ** 2); // 4
console.log(num2); // 1
В этом примере значение
num1 увеличивается перед выполнением оператора возведения в степень, поэтому num1 получает значение 3, и в результате операции получается 9. Переменная
num2 сохраняет значение 2 перед выполнением оператора возведения в степень и затем уменьшается до 1.
Об авторе
Николас Закас (Nicholas Zakas) занимается разработкой веб-приложений, в основном клиентской их части, начиная с 2000 года и широко известен своими книгами и лекциями о передовых приемах разработки пользовательского интерфейса. В течение пяти лет оттачивал свой опыт, работая в Yahoo!, где занимал пост ведущего инженера, отвечающего за главную страницу Yahoo!.. Автор нескольких книг, включая Principles of Object-Oriented JavaScript (No Starch Press, 2014) и Professional JavaScript for Web Developers (Wrox, 2012).
О научном редакторе
Юрий Зайцев (Juriy Zaytsev, известен в Сети под псевдонимом kangax) — веб-разработчик, проживающий в Нью-Йорке. Исследует и пишет о необычной природе JavaScript начиная с 2007 года. Вносит вклад в развитие нескольких открытых проектов, включая Prototype.js, и других популярных проектов, таких как его собственный Fabric.js. Сооснователь компании printio.ru, занимающейся печатью под заказ. В настоящее время работает в Facebook.
» Более подробно с книгой можно ознакомиться на
сайте издательства
»
Оглавление
»
Отрывок
Для Хаброжителей скидка 25% по купону —
ECMAScript