解构赋值:es6允许按照一定的模式,从数组或对象中提取值
let [a,b,c] = [1,2,3];
let {a,b}= {a:1,b:2};
对象
let {a,b}= {b:1,a:2} //输出2,1,即找属性名,不管什么位置
数组
例子1:(完全解构)
let [a,b,c] = [1,2,3]; console.log(a)//1 console.log(b)//2 console.log(c)//3
例子2:(不完全解构)
let [a,[b],c] = [1,[2,3],function(){}]; console.log(a)//1 [0] console.log(b)//2 [1][0] console.log(c)//function(){} [2]
这里的b,就是不完全解构的体现
不完全解构
let[a,b]=[1] //a=1,b=undefind let [a] =true //匹配不成功,报错
----------------解构赋值的默认值-----------------------------
怎么判断的?
如果右边的值===undefined,就取默认值
let [a=1,b=2]=[]; console.log(a)//1 console.log(b)//2 function add(a=0,b=0){ //ab默认值 console.log(a+b) } add() //0
设计默认值时,是惰性求值,即在用到的时候才执行默认值
function fn(){ console.log("fn") } let [a=fn()]=[1] //输出1
数组例子1
let[a=b,b=2]=[];//输出a,b时报错,因为a是b的暂时性死区,a拿不到b
对象例子2
let{a=1} = {a:2}//输出2 let {PI} =Math //找到Math对象下的PI,let PI=Math.PI
--------------------------------
除了设置默认值时,对象可以用,作为匹配规则
l
et obj ={ aaaa:1, bbbb:2 } let{aaaa:a,bbbb:b}=obj //输出a=1,b=2;aaaa报错,等号时是设置默认值.
--------------冒号模式,---------------
按照aaaa来匹配,实际使用aaaa的值,obj.aaaa的值与aaaa.a的值匹配
例子
let{a,b} = {a:1,b:2} 相当于 let{a:a,b:b} = {a:1,b:2}
如果let{a:ac,b:ad} = {a:1,b:2} 则 ac=1,ad=2;
即默认值设定为let{a:ac=0,b:ad=0} = {a:1,b:2},则 ac=1,ad=2;