Книга «ECMAScript 6 для разработчиков»

    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
    • 0
      Книг по JS и так много, что нового приносит эта?
      • 0
        Книги в основном по старому стандарту. А эта — по ES6.
      • +1

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


        этой книги?

        image

        • 0
          Две книги двух разных авторов с акцентами на разных вещах. Общая только тема.
          Сравните содержание и сразу становится понятно насколько у них разный подход и изложение.
        • +4
          «Питер», объясните мне, на кой черт вам нужен мой телефон, и почему я не могу приобрести у вас электронную версию книги не заполнив это поле? Я у вас книгу покупаю, или спам на телефон заказываю?
          • 0
            2% клиентов не правильно указывают e-mail. Спама нет.
            • +4
              Все говорят «спама нет», а ты возьми и купи слона. В общем пока это поле не станет опциональным я останусь без книги, а вы, соответственно, без моих денег. Потому что требовать — а вы именно требуете — информацию, которая не обязательна для предоставления услуги — это чистой воды жлобство.
          • 0
            немного оффтопика: какие есть варианты покупки бумажных книг в оригинале с наименьшим оверхедом?

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

            Самое читаемое