ES6-解构赋值
解构赋值:按照一定的模式,从数组和对象中提取值,对声明的变量进行赋值;如果被提取的不是数组或对象,则先转化成数组或对象。
数组的解构赋值
完全解构:等号左右两侧模式完全匹配,并且取值时,按照数组的次序排列。
let [a, b, c] = [1, 2, 3];
// a=1 b=2 c=3
let [a, [[b], c]] = [1, [[2], 3]];
// a=1 b=2 c=3
let [, , c] = ['1', '2', '3']
// c=3
let [a, , c] = ['1', '2', '3'];
// a=1 b=2 c=3
let [a, ...b] = ['1', '2', '3'];
// a=1 b=['2', '3']
let [a, b, ...c] = ['1'];
// a=1 b=undefined c=[]
不完全解构:等号左边的模式只匹配一部分右边的数组,这种情况依然可以解析成功。
let [x, y] = [1, 2, 3];
// x=1 y=2
let [a, [b], d] = [1, [2, 3], 4];
// a=1 b=2 d=4
解构失败:如果解构不成功,则变量值为undefined; 等号右边若不是数组,或不能转化成可迭代的对象,则会报错
let [a] = [];
let [b, a] = [1];
// a=undefined
let [foo] = 1;
let [foo] = false;
let [foo] = NaN;
let [foo] = undefined;
let [foo] = null;
let [foo] = {};
// 报错