布尔(x)和!! x之间的区别

使用JavaScript,是否有任何区别

Boolean(x) 

 !!x 

他们都有相同的输出,但你必须小心布尔对象vsfunction。 布尔构造函数(使用new关键字)不是原始的truefalse值。 而!! 运算符评估对象是真/假。

以下是MDN的报价:

任何值不为undefined或null的对象(包括其值为false的布尔对象)在传递给条件语句时都会计为true。

所以以下评估为false:

new Boolean(false) === false

但以下评估为真:

Boolean(false) === false

他们之间还有一个有趣的区别是,你可以在Array#filter函数中显式地传递Boolean作为callback,而如果你想使用!! ,你首先必须设置一个callback函数然后返回它。

.filter(Boolean)

.filter(!!)

.filter((x) => !!x) (可以简化,但是 – .filter((x) => x)