对象解构赋值是通过同名属性进行赋值,首先展开成{key:value}形式,key值同名匹配,value相互赋值
let {bar,foo} = {bar:'aaa',foo:'bbb'} // bar='aaa',foo='bbb'
let {bar:bar,foo:foo} = {bar:'aaa',foo:'bbb'} // bar ='aaa',foo ='bbb'
let {bar:foo,foo:bar} = {bar:'aaa',foo:'bbb'} // bar ='bbb',foo ='aaa'
解构赋值默认值只在赋值为undefined时取默认值
let func = ({x=0,y=0}={})=>console.log(x,y)
//第一个参数为undefined时取默认值{},
//第一个参数属性x,y分别为undefined时取0为默认值
func({x:1,y:2}) //1,2
func({x:1}) //1,0
func({}) //0,0
func() //0,0
let func2 = ({x,y}={x:0,y:0})=>console.log(x,y)
//第一个参数为undefined时取默认值{x:0,y:0}
func({x:1,y:2}) //1,2
func({x:1}) //1,undefined
func({}) //undefined,undefined
func() //0,0