为什么!new Boolean(false)在JavaScript中等于false?

从JavaScripttypes的jQuery文档中 ,我们可以看到这段代码描述了转换为布尔值时string的行为(该主题与这个问题没有关系,但是它只是我find代码的地方):

!"" // true !"hello" // false !"true" // false !new Boolean(false) // false 

我得到前三个例子,但是我没有得到最后一个例子,因为:

 new Boolean(false) == false //true !false // true 

所以我会假设:

 !new Boolean(false) // true 

但反而:

 !new Boolean(false) // false, mind = blown 

这是什么,我什至不…

是因为:

 new Boolean(false) === false // false 

如果是这样,这有什么用途?

new Boolean(false)返回一个非空的对象 。 非空对象总是真的。

因此, ! 任何非null对象将始终为false。


为了certificate你自己,你可以在你的JavaScript控制台中运行

 (typeof new Boolean(false)) //"object" 

此外,您可以使用strict equality运算符来确认new Boolean(false)不是真的false

 new Boolean(false) === false // false 

顺便说一句,调用Boolean函数作为一个函数 – 没有新的 – 实际上会返回一个原语

 !Boolean(false) // true (typeof Boolean(false)) //"boolean" 

因为new Boolean返回一个对象, 如下所述 。

! 定义如下 :

11.4.9逻辑NOT运算符( !

生产UnaryExpression:! UnaryExpression的计算方法如下:

  1. expr是评估UnaryExpression的结果。

  2. oldValueToBoolean(GetValue(expr))

  3. 如果oldValuetrue ,则返回false

  4. 返回true

和 :

9.2 ToBoolean

抽象操作ToBoolean根据表11将其参数转换为Booleantypes的值:

表11 – 至宝转换

参数types – 结果

对象 – true

所以,它是一个对象,因此ToBoolean返回true ,因此! 返回false