变量的解构赋值
对象篇
对象的解构和数组不同之处在于,数组的元素是按次序排列的,变量的取值是由位置决定的,而对象的属性没有次序,变量必须与属性同名才能取到正确的值
let {bar,foo}={foo:'aaa',bar:'bbb'}
console,log(bar,foo)//bbb,aaa
let {baz}={foo:'aaa',bar:'bbb'}
console.log(baz)//undefined
//对象的解构赋值的内部机制是先找到同名属性,然后再赋值给对应的变量,真正被赋值的是后者,不是前者
let {d:e}={d:'aaa',bar:'bbb'}
console.log(e)//aaa
console.log(d)//d is not defined
//嵌套赋值
let obj={}
let arr=[]
({foo;obj.prop,bar:arr[0]}={foo:123,bar:true})
console.log(obj)//{prop:123}
console.log(arr)//[true]
//对象的解构赋值也可以指定默认值
var {i=3}={}
console.log(i)//3
var {m:n=3}={}
console.log(n)//3
var {j,k=5}={j:1}
console.log(j,k)//1,5
//默认值生效的条件是:对象的属性值严格等于undefined(===)