数组的解构赋值

数组的解构赋值

在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);
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值