es6新特性-数组解构赋值

es6新特性-数组解构赋值

ES6允许按照一定模式从数组或对象中提取值,然后对变量进行赋值,这称为解构(Destructuring)
–ES6标准入门

在ES6标准中,我们可以通过模式匹配进行对变量的赋值。

//之前:直接对变量指定值
let a=1;
let b=2;
let c=3;
//现在:通过模式匹配,按照对应位置赋值
//以下为使用数组进行模式匹配
let [a,b,c]=[1,2,3]

数组的解构赋值

通过模式匹配,只要等号两边的模式相同左边的变量就会被赋予响应的值。

一、解构赋值例子:

let [a,[b,[c]]]=[1,[2,[3]]]
//a=1,b=2,c=3
let [a,,c]=[1,2,3]
let [,a,c]=[2,1,3]
let [a,c,]=[1,3,2]
//a=1,c=3
//这里没有变量接收右边的2,但是不会报错
let [a,...b]=[1,2,3,4,5]
//a=1 b=[2,3,4,5]
//...b为展开语法,会将之后的数以数组方式存入b
//...b只能放到模式匹配结束的位置
let [...b,a]=[1,2,3]
//报错:展开语法只能放在结束的位置
let [a,[b],c]=[1,[2,3],4]
//a=1 b=2 c=4 右侧的3没有变量来接收

二、失败的结构赋值

1、右侧没有值与左侧变量对应。

如果对于左侧的变量,右侧没有相应的值与其对应,则会为此变量赋予Undefined。

var [a,b]=[1]
//a=1 b=undefined
2、等号右侧不是可遍历结构。

数组解构赋值的原理是该数组具有Iterator接口,如果不具备就会报错。

let [a]=1
let [a]=false
let [a]=undifined
let [a]=null
let [a]={}
//以上都会报错,因为没有Iterator接口

三、使用默认值进行解构赋值

1、默认值为普通值
let [a,b=2]=[1]
//a=1,b=2

**注意:**es6中判断一个位置是否有值,是判断这个位置是否严格相等(===)于undefined。

let [a,b=2]=[1,undefined]
//a=1,b=2 因为b所对应的值严格等于undefined,所以使用默认值
let [a,b=2]=[1,null]
//a=1 b=null
//null==undefined为true null===undefined为false
//null不严格等于undefined所以给b赋null值

2、默认值为表达式

如果默认值为表达式的话,那么这个表达式就会是惰性求值(只有被用到才会求值)

function f(){
	console.log("被执行力!")
}
let [a=f()]=[undefined]
let [b=f()]=[]
//f()会被执行,因为需要使用f()
let [a=f()]=[1]
//f()不会被执行

三、不使用第三个变量交换a,b的值

[a,b]=[b,a]

如有问题或者建议,欢迎大佬提出!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FlowerHeap

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值