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

Следующее работает в узле v8.11.4 и в JavaScript, передаваемом в виде babel, работающем в chrome

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

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

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

1 Ответ

0 голосов
/ 22 октября 2018

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

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

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

...