Assignment destructuring是ES6引入的一种新特性,它允许我们通过一种语法形式从数组或对象中提取值并将其赋值给变量。
假设我们有一个数组,我们想将其第一项和第二项分别赋值给变量a和b:
const arr = [1, 2, 3, 4, 5];
const [a, b] = arr;
console.log(a); // 1
console.log(b); // 2
我们还可以使用默认值来避免undefined情况:
const [a = 0, b = 0, c = 0] = [1, 2];
console.log(a, b, c); // 1 2 0
同时,我们可以在函数参数中使用assignment destructuring:
function foo({ a, b }) {
console.log(a, b);
}
foo({ a: 1, b: 2 }); // 1 2
在使用assignment destructuring时,需要注意运算符优先级。例如:
const obj = { a: 1, b: 2 };
const a = obj.a || 0; // 1
const b = obj.b || 0; // 0
这里的问题在于 || 运算符的优先级比 = 运算符的优先级高,所以变量a不会被赋值为0。解决方法是给整个表达式加上括号:
const obj = { a: 1, b: 2 };
const a = (obj.a || 0); // 1
const b = (obj.b || 0); // 2