对象解构和解构赋值之间的区别?

Che*_*Lee 0 javascript ecmascript-6

例如,如果我有这样的对象:

let obj = { a: 1, b: 2 }
let { a, b } = obj;
console.log(a, b); // output 1, 2
Run Code Online (Sandbox Code Playgroud)

但是如果a和b被初始化,就像这样:

let obj = { a: 1, b: 2 };
let a = 3, b = 4;
{ a, b } = obj;
console.log(a, b); // error
Run Code Online (Sandbox Code Playgroud)

它们之间有什么区别,为什么第二个输出错误?

Nin*_*olz 7

你需要在解构赋值周围使用括号来区分解构和块语句,在块语句中无法赋值.

没有声明的作业:

( ... )没有声明的情况下使用对象文字解构赋值时,赋值语句周围的圆括号是必需的语法.

{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
Run Code Online (Sandbox Code Playgroud)