16

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

let a, b;

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

代码将正常运行;

但是让我们重写是这样的:

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

let a, b;

{ a, b } = fn();

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

4

3 回答 3

23

添加圆括号:({ 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

于 2018-07-02T12:29:59.833 回答
0

将对象赋值用括号括起来

({a ,b} = fn());
于 2021-04-04T14:48:17.403 回答
-3

使用 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();
于 2018-07-02T11:51:08.790 回答