例如,如果我有一个这样的对象:
let obj = { a: 1, b: 2 }
let { a, b } = obj;
console.log(a, b); // output 1, 2
但是如果a和b被初始化,就像这样:
let obj = { a: 1, b: 2 };
let a = 3, b = 4;
{ a, b } = obj;
console.log(a, b); // error
它们之间有什么区别,为什么第二个输出错误?
答案 0 :(得分:7)
您需要在destructuring assignment周围加上括号,以将破坏与无法分配的block statement区别开来。
Assignment without declaration:
在使用不带声明的对象文字解构赋值时,赋值语句周围的圆括号
( ... )
是必需的语法。
{a, b} = {a: 1, b: 2}
是无效的独立语法,因为左侧的{a, b}
被认为是一个块,而不是对象文字。不过,
({a, b} = {a: 1, b: 2})
和var {a, b} = {a: 1, b: 2}
都是有效的注意:您的
( ... )
表达式必须以分号开头,或者可以用于执行上一行的函数。
let obj = { a: 1, b: 2 };
let a = 3, b = 4;
({ a, b } = obj);
console.log(a, b); // 1, 2