布尔(x)和!! x之间的区别
使用JavaScript,是否有任何区别
Boolean(x)
和
!!x
?
他们都有相同的输出,但你必须小心布尔对象vsfunction。 布尔构造函数(使用new关键字)不是原始的true
或false
值。 而!! 运算符评估对象是真/假。
以下是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)
)