什么是解构?ES6允许按照一定模式,从数组和对象中提取值,然后给变量赋值
数组解构赋值
let [a,b,c] = [1,2,3]
a //1
b //2
c //3
let [a, , c] = [1,2,3]
a //1
c //2
let [a, ...b] = [1,2,3,4,5,6]
a //1
b //[2,3,4,5,6]
let [a, [b, c]] = [1,[2,3]]
a //1
b //2
c //3
let [a, b] = [1]
a //1
b //undefined
数组的解构是 按位置的模式匹配,解构如果不成功,值为undefined
对象的解构赋值
let {a, b} = {a: '123', b: '456'}
a // '123'
b // 456'
let {a} = {b: '123'}
a //undefined
let {b:a} = {b: '123'}
a //123
let {a, b:c} = {a: '111', b: '222'}
a // 111
c //222
let {a, c:{b}} = {a: '111', c: {b: '222'}}
a //111
b //222
对象解构是基于属性名的匹配,let {a, b:c} = {a: 111, b: 222} 其中变量有a和c,b只是用来匹配的模式而已,根据他寻找到b的值赋值给c,所以a为111,c为222,没有b变量
以上解构式可以理解为 let {a:a , b:c } = {a:111, b: 222} 冒号前面是模式,也就是用来匹配的属性字段名, 冒号后面才是变量名称
字符串的解构赋值
let [a,b,c,d] = '1234'
a //1
b //2
c //3
d //4
let {length: a} = '1234'
a //4
字符串的解构赋值基于把字符串当成一个数组对象(是数组,也可以是对象)
函数参数的解构赋值
function count([x,y]){
return x+y
}
count([1, 2]) //3
解构赋值设置默认值
let [a,b = 333] = [11]
a //11
b //333
let {a,c = '123'} ={a:'123', b: '456'}
a //123
c //123
如果没有匹配到,那么就是undefined,这个时候自动会把默认值给变量,这里严格(=== undefined)才会默认值赋值
let [a= 1] = [null]
a //null