解构赋值

解构赋值语法是一种 Javascript 表达式。可以将数组中的值或对象的属性取出,赋值给其他变量。

对于对象和数组的解构,有两种解构模式:绑定模式赋值模式,它们的语法略有不同。

绑定模式

在绑定模式中,模式以声明关键字(varletconst)开始。然后,每个单独的属性必须绑定到一个变量或进一步解构。

1
2
3
4
5
const obj = { a: 1, b: { c: 2 } };
const { a, b: { c: d } } = obj;
// Two variables are bound: `a` and `d`
//两个变量绑定了:a 和 b

赋值模式

在赋值模式中,模式不以关键字开头。每个解构属性都被赋值给一个赋值目标——这个赋值目标可以事先用 varlet 声明,也可以是另一个对象的属性——一般来说,可以是任何可以出现在赋值表达式左侧的东西。

1
2
3
4
5
const numbers = [];
const obj = { a: 1, b: 2 };
({ a: numbers[0], b: numbers[1] } = obj);
// The properties `a` and `b` are assigned to properties of `numbers`
//obj的两个属性,a和b,被赋值给了数组numbers[]

备注: 当使用对象文字解构赋值而不带声明时,在赋值语句周围必须添加括号 ( ... )

{ a, b } = { a: 1, b: 2 } 不是有效的独立语法,因为左侧的 {a, b} 被视为块而不是对象字面量。但是,({ a, b } = { a: 1, b: 2 }) 是有效的,const { a, b } = { a: 1, b: 2 } 也是有效的。

如果你的编码风格不包括尾随分号,则 ( ... ) 表达式前面需要有一个分号,否则它可能用于执行前一行的函数。

参考来源

解构赋值 - JavaScript | MDN