02. Destructing Pattern
Каждый паттерн деструкции содержит одну или несколько имен переменных:
Можно указывать только те значения из структуры, которые нужны:
конкретные ключи объекта;
первые элементы массива.
Перед деструкцией значение справа приводится к объекту при помощи системной функции
ToObject.Если переменная справа имеет значение
nullилиundefinedбудет выброшено исключениеTypeError.Деструкция извлекает как данные так и методы.
Деструкция извлекает данные даже если они находятся в цепочке прототипов.
К каждому имени может быть указано значение по умолчанию после знака
=.Каждое имя можно переименовать указав после имени в паттерне двоеточие и новое имя.
Если паттерн не совпадает со структурой в каких-либо частях, то пропущенные имена получают значение
undefined.
// Only needed keys
const { x } = { x: 7, y: 3 }; // x = 7
const { 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
Если хочется присвоить свойство объекта в переменную с другим именем, то можно через двоеточие указать соответствие между именем при деструкции и новой переменной:
Для массивов имеет значение порядок, поэтому нельзя использовать переименование :, но значение по умолчанию — можно.
Last updated
Was this helpful?