javascript - 带有布尔值的 Object.assign
问题描述
有什么区别
Object.assign({},obj1,obj2);
和
Object.assign(true,obj1,obj2);
我知道 obj.assign 做了什么,但后者有什么用?它返回一个布尔类型,将 obj1 和 obj2 合并到其中。
PS:这是一个面试问题,所以想知道这个用例是什么。
解决方案
如上所述,基元被“装箱”,因此如下:
Object.assign(true, obj1, obj2)
仅与以下内容相同:
const bool = Object.assign(new Boolean(true), obj1, obj2)
现在布尔对象只是常规对象,在valueOf()
调用它们时返回布尔值。这意味着你会得到一些有趣的行为:
bool === true // false
bool == true // true
+bool === 1 // true
您甚至不能在条件内使用该布尔对象,因为所有对象都是真实的:
if(Object.assign(false,{a: 1 }))
alert("works");
所以实际上常规对象和布尔对象之间没有区别,只是后者增加了一些混乱并且没有任何用途。