ECMAScript 6 — что нового

Содержание

let

объявление переменной (аналог var), локальной для блока (внутри if, switch и т.п.).

Ссылки:
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/let,
http://wiki.ecmascript.org/doku.php?id=harmony:let

const

объявляет переменную и присваивает ей значение, которое потом не может быть изменено.

Ссылки:
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/const,
http://wiki.ecmascript.org/doku.php?id=harmony:const

Блочные функции

функции, видимые только внутри блока (по аналогии с let).

http://wiki.ecmascript.org/doku.php?id=harmony:block_functions,
http://www.slideshare.net/dmitrysoshnikov/falsyvalues-dmitry-soshnikov-ecmascript-6

Выражение деструктурирования

«Разворачивает» объект или массив в последовательность переменных. При этом при разворачивании объекта нужно указать только ключи, которые нужны.
Аналоги: в Python это называется распаковыванием, в php для этого используется функция list.

https://developer.mozilla.org/en-US/docs/JavaScript/New_in_JavaScript/1.7#Destructuring_assignment_%28Merge_into_own_page.2Fsection%29

Значения по умолчанию для аргументов функций

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/default_parameters

Остальные параметры вызова функции

Конструкция позволяет получить все параметры вызова функции, для которых не определены аргументы, в виде массива (замена arguments)

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/rest_parameters

Spread

Распаковывание массива в параметры вызова функции (аналог распаковки кортежа в параметры вызова функции в Python)

https://developer.mozilla.org/en-US/docs/Syntax/Spread_operator (на момент написания ссылка ведёт на пустую статью).

Proxy

Кто-то называет это мета-объектами, но, к сожалению, очень это похоже на классы. Лично я надеюсь, что широкого распространения эта функциональность не получит. (Возможно тоже вдохновлено Python-овскими метаклассами, но всё-таки мета-объекты — это же классы).
В примере заменяется метод get объекта, чтобы для несуществующего свойства возвращать 37, а не undefined:

Подробнее: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Proxy,
http://wiki.ecmascript.org/doku.php?id=harmony:virtual_object_api.

WeakMap

Объект, ключами которого могут быть объекты. Вроде как не боится циклических ссылок внутри себя.
Имеет методы get, set, has, delete.

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/WeakMap

Итераторы

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

https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Iterators_and_Generators.
Частные случаи итераторов — генераторы и прокси-объекты (могут быть).

Генераторы

Упрощённые итераторы. Отличаются от обычных функций тем, что не вычисляют все значения сразу (если, допустим, в результате получается массив), а вычисляет следующее значение после обращения к нему. Это позволяет сберечь память и делать вычисления быстрее (не нужно ждать вычисления всех значений в массиве, возвращаемом из функции, чтобы начать обходить их в цикле; возможно, все значения и не понадобятся).

https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Iterators_and_Generators

Comprehensions

Выражения для создания генераторов на основе других генераторов.
Выражения для работы с массивами:

Выражения-генераторы:

https://developer.mozilla.org/en-US/docs/JavaScript/New_in_JavaScript/1.8#Generator_expressions_(Merge_into_Generator_expressions)

for…of

перебирает элементы коллекции (массивы, итераторы, генераторы).
Работа с массивами:

Работа с генераторами:

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/for…of

StructType

https://developer.mozilla.org/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/Declaring_types

Классы (class)

Синтаксический сахар для функций-конструкторов (с возможным наследованием)

Более сложный пример:

http://wiki.ecmascript.org/doku.php?id=strawman:maximally_minimal_classes,
http://www.nczonline.net/blog/2012/10/16/does-javascript-need-classes/

Модули

Работа с внешними модулями:

http://wiki.ecmascript.org/doku.php?id=harmony:modules,
http://wiki.ecmascript.org/doku.php?id=harmony:modules_examples,
http://wiki.ecmascript.org/doku.php?id=harmony:module_loaders.

Строки-шаблоны

Используются для замены входящих в них плэйсхолдеров на значения локальных переменных.
Преследуют 4 цели: «многострочные» строки, форматирование строк, HTML-экранирование и локализация.

Синтаксис:

Замена:

Если переменная для замены не определена, будет возбуждено исключение.
В качестве tag можно использовать произвольную функцию.

http://www.nczonline.net/blog/2012/08/01/a-critical-review-of-ecmascript-6-quasi-literals/ (хорошая подробная статья с примерами и рассуждениями об удобстве использования).

LEAVE A COMMENT