Почему здесь вылетает ошибка?

Почему я не могу св-ва объекта dinner присвоить таким образом св-вам объекта obj?

let dinner = {
  drink: 'cola', 
  food: 'cake'
};

let obj = {};
{obj.one, obj.two} = dinner;

Ответы (1 шт):

Автор решения: Grundy

Проблем в данном случае несколько:

  1. Нет сопоставления свойств в шаблоне с источником. {obj.one, obj.two} данный шаблон не указывает каким именно способом сопоставлять данные с переменными. Для решения достаточно указать конкретные поля: { drink: obj.one, food: obj.two }

  2. Неоднозначность использования фигурных скобок, в данном случае они расцениваются не как литерал объекта, либо шаблон для сопоставления, а как блок кода. Для исправления достаточно взять все выражение в скобки. ({...} = source)

Если исправить недочеты, код начинает работать:

let dinner = {
  drink: 'cola',
  food: 'cake'
};

let obj = {};

({
  drink: obj.one,
  food: obj.two
} = dinner);

console.log(obj)

Для избегания неоднозначности можно воспользоваться деструктуризацией массива

let dinner = {
  drink: 'cola',
  food: 'cake'
};

let obj = {};

[obj.one, obj.two] = [dinner.drink, dinner.food];

console.log(obj);

→ Ссылка