为什么以下代码片段返回{ a: 3, b: undefined }而不返回{ a: 3, b: 2 }?
console.log(Object.assign({ a: 1, b: 2 }, { a: 3, b: undefined }));Run Code Online (Sandbox Code Playgroud)
这个问题询问一个提供后者输出而不是前者输出的函数,但我的问题是为什么要Object.assign()这样设计?或者换句话说,{ a: 3 }和 之间到底有什么区别{ a: 3, b: undefined }?
更新(来自 apsillers 答案的评论):
{ a: 1 }说“我没有名为‘b’的属性”,{ a: 1, b: undefined }说“我有一个属性‘b’,但尚未给它赋值”,并{ a: 1, b: null }说“我有一个属性‘b’,它应该保存一个对象,但还没有却被给予了一个可以持有的物体”。由于在后两者中对象有一个属性“b”,因此无论该值是什么,它在传递给 时仍然会覆盖非空非未定义的值Object.assign()。