ES6学习笔记之变量的解构赋值——数组的解构赋值

变量的解构赋值:ES6按照一定模式从数组和对象中提取值,对变量进行赋值,这被称为解构赋值。下面是几个例子:

let [foo,[[bar],baz]]=[1,[[2],3]];
foo //1
bar //2
baz //3
let [x,,y]=[1,2,3]
x //1 
y // 3
let [head,...tail]=[1,2,3,4];
head // 1
tail //[2,3,4]
let [x,y,...z]=['a']
x //'a'
y //undefined
z // []

本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。如果解构不成功,变量的值就等于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

解构赋值允许指定默认值,ES6 内部使用严格相等运算符(===),判断一个位置是否有值。所以,**只有当一个数组成员严格等于undefined,默认值才会生效。**如果默认值是一个表达式,那么这个表达式是惰性求值的,即只有在用到的时候,才会求值。

let [foo = true] = [];
foo // true
let [x, y = 'b'] = ['a']; // x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'
let [x = 1] = [undefined];
x // 1
let [x = 1] = [null];
x // null 如果一个数组成员是null,默认值就不会生效,因为null不严格等于undefined。

默认值可以引用解构赋值的其他变量,但该变量必须已经声明。

let [x = 1, y = x] = [];     // x=1; y=1
let [x = 1, y = x] = [2];    // x=2; y=2
let [x = 1, y = x] = [1, 2]; // x=1; y=2
let [x = y, y = 1] = [];     // ReferenceError: y is not defined 因为x用y做默认值时,y还没有声明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值