Деструктивное назначение причина ошибки: "неожиданный токен =" - PullRequest
0 голосов
/ 02 июля 2018

скажем, я называю использовать этот синтаксис в es6:

let a, b;

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

код будет работать без ошибок;

но давайте перепишем так:

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

let a, b;

{ a, b } = fn();

когда я запускаю приведенный выше код, он говорит неожиданный токен "="; Я немного запутался, в чем разница?

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Добавить круглые скобки: ({ 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

0 голосов
/ 02 июля 2018

Используйте 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();
...