image Познакомьтесь с радикальными изменениями в языке 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
Поделиться с друзьями
-->

Комментарии (8)


  1. ncown
    02.05.2017 14:18

    Книг по JS и так много, что нового приносит эта?


    1. sidredin
      02.05.2017 14:45

      Книги в основном по старому стандарту. А эта — по ES6.


  1. IonianWind
    02.05.2017 15:00
    +1

    Есть ли принципиальное отличие от


    этой книги?

    image


    1. ph_piter
      02.05.2017 15:31

      Две книги двух разных авторов с акцентами на разных вещах. Общая только тема.
      Сравните содержание и сразу становится понятно насколько у них разный подход и изложение.


  1. AstarothAst
    02.05.2017 20:06
    +4

    «Питер», объясните мне, на кой черт вам нужен мой телефон, и почему я не могу приобрести у вас электронную версию книги не заполнив это поле? Я у вас книгу покупаю, или спам на телефон заказываю?


    1. ph_piter
      02.05.2017 21:58

      2% клиентов не правильно указывают e-mail. Спама нет.


      1. AstarothAst
        02.05.2017 22:05
        +4

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


  1. e1nste1n
    03.05.2017 15:22

    немного оффтопика: какие есть варианты покупки бумажных книг в оригинале с наименьшим оверхедом?