ES6-Разрушение и присвоение массивов
- Определение деструктуризации
ES6 позволяет извлекать значения из массивов и объектов в соответствии с определенными шаблонами, а затем присваивать значения переменным.
В прошлом присвоение значений переменным могло быть указано только напрямую, например:
let a=1;
let b=2;
let c=3;
Поскольку в ES6 введено деструктурирующее присваивание, переменные могут быть определены следующим образом:
let [d, e, f] = [4, 5, 6];
console.log(d, e, f); //4 5 6
console.log([d, e, f]); //[4,5,6]
Приведенный выше код извлекает значения из массива и присваивает значения переменным в соответствии с соответствующими позициями. По сути, этот тип записи относится к сопоставлению с образцом. Пока образцы по обе стороны от знака равенства являются То же самое, переменной слева будет присвоено соответствующее значение.
- Назначение деструктуризации массива может быть вложенным, если деструктуризация не удалась, значение переменной вернет undefined
let [x, [y, z]] = [1, [2, 3]];
console.log(x, y, z); //1 2 3
let [, , third] = ['a', 'b', 'c'];
console.log(third); //'c'
let [head, ...tail] = [1, 2, 3, 4, 5];
console.log(head, tail); //1 [2,3,4,5]
let [m, n, ...o] = ['a'];
console.log(m); //'a'
console.log(n); //undefined
console.log(o); //[]
- Неполная деконструкция
Шаблон слева от знака равенства соответствует только части массива справа от знака равенства. В этом случае деконструкция может быть успешной.
let [g, h] = [1, 2, 3];
console.log(g); //1
console.log(h); //2
console.log([g, h]); //[1,2]
- Назначение деструктуризации позволяет указать значения по умолчанию
let [foo = true] = [];
console.log(foo); //true
let [x1, y1 = 'b'] = ['a', undefined];
console.log(x1); //'a'
console.log(y1); //'b'
- ES6 внутренне использует оператор строгого равенства '===', чтобы определить, имеет ли позиция значение. Следовательно, если член массива не является строго равным undefined, значение по умолчанию не вступит в силу.
let [x2 = 1] = [undefined];
console.log(x2); //1
let [x3 = 1] = [null];
console.log(x3); //null
- Если значением по умолчанию является выражение, тогда выражение вычисляется лениво, то есть оно будет вычисляться только тогда, когда оно используется.
function fn() {
console.log('aaa');
}
let [x4 = fn()] = [1];
console.log(x4); //1(x4能取到值,所以函数fn()根本不会执行)
/* 以上代码等价于 */
// let x4;
// if (([1][0]) === undefined) {
// x4 = fn();
// } else {
// x4 = [1][0];
// }
// console.log(x4);//1