数组的解构赋值
在ES6中允许按照一定的模式从数组或者对象中进行取值,对变量进行赋值,这个过程就是解构赋值
// 以前我们进行变量赋值时是这样做的
var i = 1;
var l = 2;
//在ES6中我们可以这样进行赋值
let [x,y,z] = [1,2,3]
console.log(x);//1
console.log(y);//2
console.log(z);//3
在本质上这属于一种“模式匹配”,也就是说只要等号两边的模式一样可以进行赋值
let [[x],[y,[z]]] = [[1],[2,[3]]];
console.log(x);//1
console.log(y);//2
console.log(z);//3
let [x,...y] = [1,2,3];
console.log(x);//1
console.log(y);//[2.3]
如果解构赋值不成功,就相当于你定义了一个变量但是没有赋值,这时会返回undefined
解构赋值不成功主要是因为值不够所造成的
let [x,y,...z] = [1];
console.log(x);//1
console.log(y);//undefined
console.log(z);//[] 这里会输出一个空数组时是因为扩展运算符(...)
不完全解构就是在值充足的情况下,变量不足,当然也算解构成功
let [x,y] = [1,2,3];
console.log(x);//1
console.log(y);//2
在解构赋值中是允许有默认值的,在ES6中使用(===)来判断一个位置是否有值 ,只有严格等于undefined时,默认值才会生效
let [x=1,y=2] = [];
console.log(x);//1
console.log(y);//2
let [x,y=2] = [1];
console.log(x);//1
console.log(y);//2
//如果默认值是一个表达式,那么这个表达式是惰性求值的,只有在用到的时候,才会求值
function fn(){
console.log("不用我我就不给值");
return 111
}
let [x=fn()] = [1];
console.log(x);//1
let [x=fn()] = [];//不用我我就不给值
console.log(x);//111
//默认值也可以引用解构赋值的其他变量,但是该变量必须是已经声明了的
let [x=1,y=x]=[]
console.log(x);//1
console.log(y);//1
let [x=y,y=1]=[]
console.log(x);//ReferenceError: y is not defined
console.log(y);
873

被折叠的 条评论
为什么被折叠?



