结构赋值
数组解构赋值,这种写法属于'模式匹配',只要等号两边的模式相同,左边的值等于右边的
let [a,b,c]=[1,2,3]
let [aa,[[bb],c]]=[1,[[3],2]
let [,,z]=[1,2,3]
let [x,...y]=[1,2,3,4,5,6]
如果解构不成功就会报错
let [aaa,bbb]=[11]
let [aaa,bbb=22]=[11,undefined]
//es6内部使用严格相等运算符(===),判断一个位置是否有值,所以只有当一个成员严格等于undefined,默认才会有效
let [x=1]=[undefined] xx=undefined
let [xx=1]=[null] xx=null
null==undefined true
null===undefined false
如果一个数组成员是null,默认值就不会生效,因为null不严格等于undefined
function fn(){
console.log('aaaa')
}
let [z=fn()]=[1]
//上面的代码,因为z能取到值,所以函数根本就不会执行
let [d = 1,e = d]=[]
默认值是可以引用结构赋值的其他变量,但该变量必须已经声明
let [g=2,h=g]=[2]
let [g=1,h=g]=[2] //g=1 h=2
let [i=3,j=i]=[11,22] //i=11 j=22
let [k=m,m=1]=[] //报错 m is not defined