var [a,b,c] = [1,2,3];// a=1, b=2, c=3 // 这其实是一种模式匹配,只要两边的模式相同,就能正确地赋值: let [a,[b,c]] = [1,[2,3]];// a=1, b=2, c=3 let [ , ,c] = [1,2,3];// c=3 let [c] = [1,2,3];// c = 1 let [a,c] = [1];// a = 1, c undefined
如果等号的右边不是数组(或者严格地说,不是可遍历的结构),那么将会报错
1 2 3 4 5 6 7
// 报错 let [foo] = 1; let [foo] = false; let [foo] = NaN; let [foo] = undefined; let [foo] = null; let [foo] = {};
默认值可以引用解构赋值的其他变量,但该变量必须已经声明:
1 2 3 4
let [x = 1, y = x] = []; // x=1; y=1 let [x = 1, y = x] = [2]; // x=2; y=2 let [x = 1, y = x] = [1, 2]; // x=1; y=2 let [x = y, y = 1] = []; // ReferenceError