首页 > 解决方案 > 带有布尔值的 Object.assign

问题描述

有什么区别

Object.assign({},obj1,obj2);

Object.assign(true,obj1,obj2);

我知道 obj.assign 做了什么,但后者有什么用?它返回一个布尔类型,将 obj1 和 obj2 合并到其中。

PS:这是一个面试问题,所以想知道这个用例是什么。

标签: javascriptobjectecmascript-6

解决方案


如上所述,基元被“装箱”,因此如下:

 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");

所以实际上常规对象和布尔对象之间没有区别,只是后者增加了一些混乱并且没有任何用途。


推荐阅读