一、基本用法
解构:ES6允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,称之为解构
以前,为变量赋值只能直接指定值
let a = 1;
let b = 2;
let c = 3;
ES6允许写成下面这样
let [a,b,c] = [1,2,3];
上面代码表示可以从数组中提取值,按照对应位置对变量进行赋值。
本质:这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。
以下是一些使用嵌套数组进行结构的例子:
let [fir,[[sec],thi]] = [1,[[2],3]];
fir//1
bar//2
thi//3
let [ , ,third] = ["foo","bar","baz"];
third//baz
let [x, ,y] = [1,2,3];
x//1
y//3
如果解构不成功,变量的值就等于undefined
let [foo] = [];
let [bar ,foo] = [1];
以上两种请情况都属于解构不成功,foo的值都等于undefined
另一种情况是并不完全解构,即等号左边的模式只匹配等号右边数组的一部分。这种情况下解构依然可以成功。
let [x,y] = [1,2,3];
x//1
y//2
let [a,[b],d] = [1,[2,3],4];
a//1
b//2
d//4
上面两个例子都属于不完全解构,但是可以成功
二、默认值
解构赋值允许默认赋值
let [foo = true] = [];
foo//true
let[x,y = 'b'] = ['a'];
x//'a'
y//'b'
let [x,y = 'b'] = ['a',undefined];
x//'a'
y//'b'
注意:ES6内部使用严格相等运算符(===)判断一个位置是否有值。所以如果一个数组成员不严格等于undefined,默认值是不会生效的
例如:
let [x = 1] = [undefined];
x//1
let [x = 1] = [null];
x//null
上面代码中如果一个数组成员是null,默认值就不会生效因为null不严格等于undefined。