数组的解构赋值
数组的解构赋值是,通过新建一个数组,数组内的变量和目标数组是一一对应的,按照索引的方式去获取值,然后赋值给指定索引上的变量。
等号右边数组中的索引值和左边数组中的常量或变量一一对应就能完成赋值
js
// 数组解构赋值遵守模式匹配,即:等号两边的模式相同。
let [a, b, c] = [1, 2, 3];
console.log(a, b, c); // 1 2 3
let [a1, b1] = [1, 2, 3, 4, 5];
console.log(a1, b1); // 1,2
let [x, , y] = [1, 2, 3];
console.log(x, y); // 1 3
let [m, n, [l]] = [1, 2, [4, 5]];
console.log(m, n, l); // 1 2 4
let [i, [j], k] = ["A", ["a", "b"], "B"];
console.log(i, j, k); //A a B如果不取值的,可以直接用逗号跳过
js
// 数组解构赋值遵守模式匹配,即:等号两边的模式相同。
// 如果不取值的,可以直接用逗号跳过
const [, , a] = [1, [2, 3, 5], 6];
console.log(a); // 6
const [a, [, , b], c] = [1, [2, 3, 5], 6];
console.log(a, b, c); // 1 5 6如果解构不成功,则默认值为 undefined
js
let [a, b, c] = [1, 2];
console.log(a, b, c); // 1 2 undefined
// 上面的变量c没有取到值,则其默认值为undefined数组解构的默认值
默认值的基本用法
数组解构时,如果变量的取值为 undefined 时,我们想为变量采用其它值,则就可以为变量指定默认值。
js
// 对空数组 [] 解构赋值
let [a, b] = [];
console.log(a, b); // undefined undefined
// 变量x的默认值=1,y的默认值=2
let [x = 1, y = 2] = [];
console.log(x, y); // 1,2
// 变量x的默认值=1,y的默认值=3
let [x = 1, y = 3] = [8, undefined];
console.log(x, y); // 8 3注
当解构赋值时,变量对应的值严格等于=== undefind时,其默认值才会生效
默认值为表达式
如果默认值是一个表达式,那这个表达式是惰性求值的。也就是变量的取值不为 undefined 时,表达式才会执行求值,否则不会执行。
js
const fn = () => 3;
let [x = fn()] = [1];
console.log(x); // 1
// 因为x能解构成功得到值1,所以fn()函数根本就不会执行默认值引用解构值的其他变量
默认值可以引用解构值的其他变量,但该变量必需要已经声明
js
let [a = 1, b = a] = [];
console.log(a, b); // 1 1
let [x = 1, y = x] = [2];
console.log(x, y); // 2 2
let [m = 1, n = m] = [2, 3];
console.log(n, m); // 2 3
let [i = j, j = 2] = []; // 报错 ,因为当i用到j时,j还没有被声明