Почему деструктуризация объекта вызывает ошибку, если var
перед ним нет ключевого слова?
{a, b} = {a: 1, b: 2};
бросает SyntaxError: expected expression, got '='
Следующие три примера работают без проблем
var {a, b} = {a: 1, b: 2};
var [c, d] = [1, 2];
[e, f] = [1, 2];
Дополнительный вопрос: почему нам не нужен var
для деструктуризации массива?
Я столкнулся с проблемой, делая что-то вроде
function () {
var {a, b} = objectReturningFunction();
// Now a and b are local variables in the function, right?
// So why can't I assign values to them?
{a, b} = objectReturningFunction();
}
источник
Если вы пишете Javascript без точек с запятой , то синтаксис «присвоение без объявления» должен начинаться с точки с запятой, чтобы он работал предсказуемо.
let a, b ;({a, b} = objectReturningFunction()) // <-- note the preceding ;
Просто хотел подчеркнуть это, поскольку это меня поймало, и, надеюсь, поможет другим сэкономить время, выясняя, почему это не работает и / или дает странные результаты с такими программами форматирования кода, как
prettier
.В самом деле, это действительно прямо в принятом ответе (последняя строка процитированных документов), но его легко пропустить, особенно не видя примера!
источник
Вот еще один способ:
let {} = {a, b} = objectReturningFunction()
Плюсы:
Минусы:
!(){...}()
IIFE .источник
;({ a, b })
чемlet {} = { ... }
. Но неплохой трюк. :)