//模式匹配
let [a,b,c] = [1,2,3];
//嵌套数组
let [foo,[[bar],baz]] = [1,[[2],3]];
let [,,third] = ['foo','bar','baz']
let [x,,y] = [1,2,3]
let [head,...tail] = [1,2,3,4]
let [x,y,...z] = ['a']
//解构不成功,变量的值就等于undefined
let [foo] = []
let [bar,foo] = [1]
//不完全解构
let [x,y] = [1,2,3]
let [a,[b],d] = [1,[2,3],4]
//等号右边不是可遍历的结构,不具备Iterator接口,报TypeError错误
let [foo]=1
//Set结构,也可以使用数组的解构赋值
let [x,y,z] = new Set(['a','b','c'])
//允许指定默认值。
//使用严格相等运算符,只有严格等于undefined时,默认值才会生效。
let [foo=true] = []
//默认值是表达式时,是惰性求值,只有用到的时候才会求值。
function f(){
console.log('aaa')
}
let [x=f()] = [1]
//默认值可以引用解构赋值的其他变量,但该变量必须已经声明。
let [x=1,y=x] = []
let [x=y,y=1] = [] //报错