ES6-Деконструкция и присвоение объектов
Как и массивы, объекты также можно деструктурировать.
let {name, age} = {name: 'jisoo', age:25};
console.log(name);//'jisoo'
console.log(age);//25
Однако существует разница между деструктурирующим назначением объекта и деструктурирующим назначением массива. Элементы массива расположены по порядку, а значение переменной определяется ее положением, а атрибуты объекта имеют нет порядка. Имя переменной должно совпадать с именем атрибута. Правильное значение.
let {job, salary}={salay: 20000, job: 'doctor'};
console.log(salary);//20000
consol.log(job);//'doctor'
Как и в случае с массивами, undefined будет возвращено, если значение недоступно.
let {gender}={sex: 'female', level: 'boss'};
console.log(gender);//undefined
Назначение деконструкции объекта является сокращением для следующего кода let {foo: foo , bar: bar} = {foo: 'aaa', bar: 'bbb'}
, то есть внутренний механизм назначения деконструкции объекта состоит в том, чтобы сначала найти атрибут с тем же именем, а затем присвоить его соответствующей переменной. Последний фактически назначается вместо первого , как показано в следующем коде Show:
let obj = {first: 'hello', last: 'world'};
let {first: f, last: l}=obj;
console.log(f);//first
console.log(l);//last
console.log(first);//Error(first is not defined)
Как и массивы, деструктуризация также может использоваться для объектов с вложенными структурами.
let obj1 = {
p: ['hello', {
y: 'world'
}]
};
let {
p: [x, {
y
}]
} = obj1;
console.log(x); //'hello'
console.log(y); //'world'
При деконструкции объекта также можно использовать значение по умолчанию. Условием для вступления в силу значения по умолчанию является то, что свойство объекта строго равно неопределенному.
var {
x3 = 3
} = {
x: undefined
};
console.log(x3); //3
var {
x4 = 3
} = {
x4: null
}
console.log(x4); //null
Поскольку массив является особым объектом, он может деконструировать свойство объекта массива.
let arr = [1, 2, 3];
let {
0: first1,//0号索引
[arr.length - 1]: last1//2号索引
} = arr;
console.log(first1); //1
console.log(last1); //3