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]
如有问题或者建议,欢迎大佬提出!