Destructuring assignment cause error: "unexpected token ="

Destructuring assignment cause error: "unexpected token ="

假设我在 es6 中使用这个语法:

let a, b;

{a, b} = { a: 100, b: 300 };

代码将 运行 没有错误;

但让我们改写成这样:

function fn() {
    return { a: 100, b: 200 }
}

let a, b;

{ a, b } = fn();

当我运行上面的代码时,它说意外的标记“=”; 我有点困惑,有什么区别?

使用 a,b 代替 {a,b}:

let a, b;
a,b = { a: 100, b: 300 };


function fn() {
    return { a: 100, b: 200 }
}

let a, b;
a,b = fn();

添加圆括号:({ a, b } = fn());

来自 Mozilla 文档:

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

{a, b} = {a: 1, b: 2} 不是有效的独立语法,因为左侧的 {a, b} 被视为块而不是对象文字。

但是,({a, b} = {a: 1, b: 2})var {a, b} = {a: 1, b: 2}

一样有效

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

将对象赋值括在括号中

({a ,b} = fn());