Почему следующий фрагмент возвращает { 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()
.