ECMAScript 6 — что нового
Содержание
- let
- const
- Блочные функции
- Выражение деструктурирования
- Значения по умолчанию для аргументов функций
- Остальные параметры вызова функции
- Spread
- Proxy
- WeakMap
- Итераторы
- Генераторы
- Comprehensions
- for…of
- StructType
- Классы (class)
- Модули
- Строки-шаблоны
- Полезные ссылки
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/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
Выражения для создания генераторов на основе других генераторов.
Выражения для работы с массивами:
Выражения-генераторы:
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/ (хорошая подробная статья с примерами и рассуждениями об удобстве использования).
Ссылки для более подробного изучения
- http://wiki.ecmascript.org/doku.php?id=harmony:proposals — официальная wiki ECMAScript
- https://developer.mozilla.org/en-US/docs/JavaScript/ECMAScript_6_support_in_Mozilla — описание в MDN
- http://www.slideshare.net/dmitrysoshnikov/falsyvalues-dmitry-soshnikov-ecmascript-6 — неплохая презентация (слайды)
- http://docs.webplatform.org/wiki/concepts/programming/javascript/future — описание на webplatform (пока почти пусто)
- http://espadrine.github.com/New-In-A-Spec/es6/ — краткое описание всех нововведений
- http://kangax.github.com/es5-compat-table/es6/ — сводная таблица реализации новых возможностей в существующих браузерах и node.js
- http://www.nczonline.net/blog/2012/07/24/thoughts-on-ecmascript-6-and-new-syntax/ — что думает Nicholas C. Zakas по поводу ECMAScript 6
- http://habrahabr.ru/post/151690/ — поддержка ECMAScript Harmony в node.js с примерами
Similar Posts
- None Found
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.