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

Следуйте работает в узле v8.11.4 и в вавилон перевел JavaScript, работающий на Chrome

const myFunc = ({
  aryOfObjs,
  combinedObj = Object.assign({}, ...aryOfObjs),
}) => console.log(combinedObj);
myFunc({
  aryOfObjs: [
    { foo: 'bar'},
    { biz: 'baz' },
  ]
}); // => { foo: 'bar', biz: 'baz' }

В EMACScript 2015 гарантированно ли это работает, как показано выше?

Я знаю, что node и babel не являются на 100% жалобой на EMACScript 2015, но я полагаю, что они оба реализуют спецификацию деструктурирования объектов. Я не могу найти ничего явного в mdn, который говорит, что это поддерживается, ни в официальной спецификации ECMAScript 2015

1 ответ

Решение

Да, это действительный код ES2015. aryOfObjs переменная, введенная в область действия функции, и Object.assign({}, ...aryOfObjs) является выражением, вычисленным в этой области, поэтому оно может получить доступ к любой из этих переменных. Единственный раз, когда это будет ошибка, если они были недоступны, как

const myFunc = ({
  combindedObj = Object.assign({}, ...aryOfObjs),
  aryOfObjs,
}) => console.log(combindedObj);

который выдает ошибку, потому что aryOfObjs еще не был инициализирован.

Другие вопросы по тегам