ES6 Object.assign (): почему неопределенные свойства переопределяют определенные свойства? - PullRequest
0 голосов
/ 26 февраля 2019

Почему следующий фрагмент возвращает { a: 3, b: undefined }, а не { a: 3, b: 2 }?

console.log(Object.assign({ a: 1, b: 2 }, { a: 3, b: undefined }));

Этот вопрос задает вопрос о функции, которая выдает последний вывод вместо первого, но мой вопрос заключается в том, почему Object.assign() был разработан таким образом?Или, другими словами, чем конкретно отличаются { a: 3 } и { a: 3, b: undefined }?

ОБНОВЛЕНИЕ (из комментариев на ответ апсиллеров):

{ a: 1 } говорит: «У меня нет свойства с именем« b »», { a: 1, b: undefined } говорит «У меня есть свойство« b », но ему еще не присвоено значение», а { a: 1, b: null } говорит «У меня есть свойство» b«который должен содержать объект, но еще не получил объект для хранения».Поскольку в последних двух объектах есть свойство 'b', независимо от значения, оно все равно будет переопределять ненулевые не неопределенные значения при передаче в Object.assign().

1 Ответ

0 голосов
/ 26 февраля 2019

{ a: 3 } имеет одно свойство, ключом которого является строка "a".Вы можете наблюдать это по Object.keys({a:3}), что возвращает ["a"].

{ a: 3, b: undefined } имеет два свойства, одно из которых называется a, а другое - b.Вызов Object.keys({a: 3, b: undefined}) возвращает ["a", "b"].

Object.assign использует значения из любых (перечислимых) свойств, существующих для каждого входящего объекта, и спецификация assign специально не обрабатывает случай, когда свойство происходит симеют значение undefined.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...