为什么以下代码段返回{ a: 3, b: undefined }
而不返回{ a: 3, b: 2 }
?
console.log(Object.assign({ a: 1, b: 2 }, { a: 3, b: undefined }));
This question询问一个给出后者输出而不是前者输出的函数,但是我的问题是为什么Object.assign()
是用这种方式设计的?或者换一种说法,{ a: 3 }
和{ a: 3, b: undefined }
之间到底有什么区别?
更新(摘自对ps弹手答案的评论):
{ a: 1 }
说“我没有名为'b'的属性”,{ a: 1, b: undefined }
说“我有一个属性'b'但尚未赋值”,并且{{1} }说:“我有一个属性'b',该属性应容纳一个对象,但尚未被赋予要容纳的对象”。由于在后两个对象中,该对象都具有属性“ b”,无论其值是多少,当传递到{ a: 1, b: null }
时,它仍将覆盖非null非未定义的值。
答案 0 :(得分:1)
{ 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
的情况