基本语法
1.数组按照对应位置,对变量赋值
let [a,b,c]=[3,2,1]; //a=3,b=2,c=1
let [ , , third] = ["foo", "bar", "baz"]; //third="baz"
2.扩展运算符 ...
扩展运算符会把后面剩余的都解构
let [x,...y] = [1, 2, 3]; //a=1,y=[2,3]
//如果扩展运算符没有解构到值,变量默认赋值为空数组
let [x, y, ...z] = ['a'];
x // "a"
y // undefined
z // []
后面再跟变量,会报错
let [x,...y,z] = [1, 2, 3]; //error
3.如果解构不成功,会赋值为undefined
let [foo] = []; //foo=undefined
let [bar, foo] = [1]; //foo=undefined
默认值
1.解构赋值可以设置默认值,当数组对应的位置上没有值(解构undefined),默认值才会生效。
let [x = 1] = [undefined];
x // 1
let [x = 1] = [null];
x // null
2.默认值是表达式的话为惰性求值,即用到了才会求值。
let [x = fn()] = [1]; //函数fn不会自动调用,因为x已经取到值了,不需要用默认值
3.默认值可以引用解构赋值的其他变量,但该变量必须已经声明。
let [x = 1, y = x] = [2]; // x=2; y=2
let [x = y, y = 1] = []; // ReferenceError: y is not defined
网友评论