› 1: Псевдоним
Свойство может быть распаковано из объекта и присвоено переменной с именем, отличным от имени свойства объекта.
// {sourceProperty: targetVariable (Alias) }p --> foo q --> bar
› 2: значение по умолчанию
Переменной может быть присвоено значение по умолчанию, в случае, если из объекта распаковано значение undefined
(не предусмотрено)
const {a = 10, b = 5} = {a: 3, b: undefined (Not provided) } Therefore, a (3 | 10) --> 3 b (undefined | 5) --> 5
› 3: Объединение 1 и 2 ; Псевдоним и значение по умолчанию
const {a: aa = 10, b: bb = 5} = {a: 3, b: undefined} Therefore, - Step1 a (3 | 10) --> 3 b (undefined | 5) --> 5 - Step2 // {sourceProperty: targetVariable (Alias) } a --> aa b --> bb
› 4: Основное задание
const {p, q} = {p: 42, q: true} p --> 42 q --> true
› 4.1: Необычность: будьте осторожны с использованием `let`
Код ниже не будет работать
- JavaScript обрабатывает
{...}
в основном потоке кода (а не внутри другого выражения) как блок кода (напоминание:let
имеет область действия блока)
›› Исправление 1
›› Исправление 2
› 5: Деструктуризация функциональных параметров
userId(user) // passing user Object function userId({id}) === {id: 42, displayName: 'jdoe', fullName: {...} Therefore, id inside userId function becomes 42
user
объектid
свойство деструктурировано, поэтому становится{id: id}
› 5.1: Сингулярность: будьте осторожны с параметрами по умолчанию
›› Исправление 1
предоставление {}
, которое используется в качестве значения по умолчанию для объекта параметра
›› Исправление 2
делая {}
значением по умолчанию для всего объекта параметров
› 6: Деструктуризация параметра функции вложенного объекта
displayName
деструктурирован так же, как ›5:firstName
вложенное свойство пользовательского объекта деструктурировано дважды
// destructuring fullName (1st depth) const user = { fullName : { ... } } // {fullName} // destructuring firstName (2nd depth) {fullName: {firstName}} // {firstName} // firstName alias to name {fullName: {firstName: name}} // name
› 7: распространение в деструктурировании объектов
Свойства Rest/spread собирают оставшиеся собственные перечисляемые ключи свойств, которые еще не выбраны шаблоном деструктурирования.
let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40} a --> 10 b --> 20 rest --> {c: 30, d: 40} // what's left