数组解构赋值(ES6知识点汇总---第二章)

1、定义
ES6允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,这被称为结构(Destructuring)。

2、用法
在ES6之前为变量赋值只能直接指定值,例如:

let a = 1;
let b = 2;

ES6允许进行如下写法:

let [a,b,c] = [1,2,3];

上面的代码表示,可以从数组中提取值,并按照对应位置对变量进行赋值。
本质上这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。

let [foo,[[bar],baz]] = [1,[[2],3]];
foo //1
bar //2
baz //3

let [,,third] = ['1','2','3'];
third //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 // []
...扩展运算符 详见(https://blog.csdn.net/weixin_45472408/article/details/118256794)

如果解构不成功,变量的值就等于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

对于Set结构,也可以使用数组的解构赋值;

let [x,y,x] = new Set(['a','b','c']);
x //'a'

事实上,只要某种数据解构具有Iterator接口,都可以采用数组形式的解构赋值。

function* fibs(){
	let a = 0;
	let b = 1;
	while(true){
		yield a;
		[a,b] = [b,a + b];
	}
}

let [first, second, third, fourth, fifth, sixth] = fibs();
sixth //5

上面的代码中,fibs是一个Generator函数,原生具有Iterator接口。解构赋值会依次从这个接口中获取值。(Generator函数、Iterator接口还不明白什么意思,先照着书写上,等我琢磨明白了会开个单章)

3、默认值
解构赋值允许指定默认值。

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] = [unll]; 	    // x = null
//null不严格等于undefined

如果默认值是一个表达式,那么这个表达式是惰性求值的,即只有在用到时才会求值。

function f(){
	console,log(1);
}
let [x = f()] = [1];

上面代码中,因为x能取到值,所以函数f根本不会执行。

可以理解为只要赋值的变量为undefined的情况下定义的变量就会等于默认值(表达式),反之如默认值是个表达式则根本不会执行。

写博第3/100
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值