Каждый паттерн деструкции содержит одну или несколько имен переменных:
Можно указывать только те значения из структуры, которые нужны:
конкретные ключи объекта;
первые элементы массива.
Перед деструкцией значение справа приводится к объекту при помощи системной функции ToObject.
Если переменная справа имеет значение null или undefined будет выброшено исключение TypeError.
Деструкция извлекает как данные так и методы.
Деструкция извлекает данные даже если они находятся в цепочке прототипов.
К каждому имени может быть указано значение по умолчанию после знака =.
Каждое имя можно переименовать указав после имени в паттерне двоеточие и новое имя.
Если паттерн не совпадает со структурой в каких-либо частях, то пропущенные имена получают значение undefined.
// Only needed keysconst{x}={x:7,y:3};// x = 7const{toString:s}=123;
Default Values
Объявлениям в паттерне можно задавать значение по умолчанию:
// значения по умолчаниюlet[firstName="Гость",lastName="Анонимный"]= [];alert(firstName);// Гостьalert(lastName);// Анонимныйlet{foo=3,bar}={};// x = 3; y = undefined
Параметр по умолчанию так же используется, если само значение в структуре равно undefined (это еще лишний раз доказывает, что значениям undefined не место в программе):
Значением по умолчанию может быть выражение или функция, которые будут вычислены лениво, по требованию, если объявление не получило своего собственного значения.
Значение по умолчанию может ссылаться на другой идентификатор в этом же паттерне, объявленный ранее.
Значением по умолчанию для паттерна может быть объект, к которому данный паттерн должен быть применен, если он не был применен в целевой структуре данных. Например:
Assign on destructing
Если хочется присвоить свойство объекта в переменную с другим именем, то можно через двоеточие указать соответствие между именем при деструкции и новой переменной:
Для массивов имеет значение порядок, поэтому нельзя использовать переименование :, но значение по умолчанию — можно.