Утверждён стандарт ECMAScript 6

На очередном собрании Генеральной Ассамблеи ECMA официально утверждён стандарт ECMAScript 2015 (PDF), более известный как ECMAScript 6 или «ECMA-262 6th edition».

ECMAScript 6 продолжает линейку стандартов, определяющих базовые функциональные возможности JavaScript, реализованные для всех web-браузеров. Прошлый стандарт ECMAScript 5 был принят в 2009 году, а позапрошлый в 1999 году. Долгое время развитие стандарта было заморожено из-за трудноразрешимых разногласий среди производителей браузеров, одни из которых выступали за внесение значительных изменений в JavaScript, а другие настаивали на сохранении полной семантической совместимости.

Основные нововведения ECMAScript 6:

  • Поддержка классов. Например:
      class Polygon {
        constructor(height, width) {
           this.name = 'Polygon';
           this.height = height;
           this.width = width;
        }
    
        sayName() {
           log('Hi, I am a ', this.name + '.');
        }
      } 
    
      let p = new Polygon(300, 400);
    
    
  • Шаблоны строк, предоставляющие удобные средства для форматирования строк. Шаблоны строк являются строковыми литералами, допускающими встраивание выражений. Выражения определяются в размещённом внутри строки блоке ${…}, который может включать как отдельные переменные (${name}), так и выражения (${5 + a + b})). Например, в результате выполнения «var message = ‘1 + 1 = ${1 + 1}'» в переменную будет записана строка «1 + 1 = 2»;
  • Поддержка лексических объявлений переменных (Lexical Declarations), позволяющих ограничить текущим блоком область видимости ключевых слов, через их повторное определение при помощи оператора let вместо var.
  • Оператор const для определения переменных, доступных только для чтения;
  • Модули. Для экспорта и импорта модулей введены операторы export и import, например, «import * as mymodule from «lib/mymodule». Предоставляются средства динамической загрузки модулей, пространства имён и изоляция состояния.
  • Arrow-функции позволяющие использовать синтаксис «=» для быстрого определения анонимных функций (например, «x.map(x = console.log(x * x));») и ключевое слово «this» для доступа к текущему лексическому контексту функции;
  • Сокращённый формат задания объектов (например, «var a = {obj1, obj2}» вместо «var a = {‘obj1’: obj1, ‘obj2’: obj2}»);
  • Тип Symbol, применимый для идентификаторов свойств объектов;
  • Генераторы, позволяющие организовать эффективное выполнение функций в асинхронном режиме. Генераторы представляют собой специальные функции, генерирующие итераторы. Использование выражения yield для генератора, позволяет приостановить его выполнение и вернуть управление вызвавшей генератор функции. Особенность генераторов состоит в том, что последующие вызовы будут использовать предыдущее состояние и продолжат выполнение кода генератора с того места, где он был приостановлен.
  • Объект WeakSet, позволяющий определить множество из объектов, и объект WeakMap, определяет коллекцию пар ключ/значение в которых ключ является объектом, к которому может быть прикреплено произвольное значение. WeakSet и WeakMap отличаются использованием эффективных с точки зрения потребления памяти структур, использующих сборщик мусора для удаления неиспользуемых объектов (объект удаляется, если на него больше не осталось ссылок, кроме ссылки из текущей коллекции) и предотвращающих возникновение утечек памяти;
  • Механизм Promise, предназначенный для получения значений в асинхронном режиме. Позволяет определить значение, которое пока неизвестно, но будут определено через какое-то время;
  • Возможность определения значений по умолчанию для аргументов функций (например, «function myfunc(a=’test’, b=1)»);
  • Возможность передачи в функцию произвольной группы параметров в форме массива (например, «function myfunc(a, b, …c)»);
  • Новая форма слияния массивов (например, «var a= [3,4]; var b = [1,2,…a])»;
  • Cтруктуры данных Map и Set, упрощающих работу со специфичными типами коллекцией. Map позволяет определять коллекции наборов в формате ключ/значение, при том, что в качестве ключа и значения могут выступать любые выражения JavaScript. По аналогии Set позволяет задать множество любых выражений JavaScript;
  • Поддержка абстракции массивов (Array comprehensions), дающих возможность создания нового массива на основе другого массива;
  • Большая порция новых методов для строк, массивов и математических операций, в том числе
    Array.from(), Array.prototype.keys, Array.prototype.entries, Array.prototype.copyWithin(), Number.isSafeInteger(), Math.fround(), Math.ToFloat32(), startsWith(), endsWith(), contains(), clear() и Math.imul;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.