一尘不染

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

javascript

来自javascript类型的jQuery文档中的这段代码片段描述了转换为布尔值时字符串的行为(该主题与该问题无关,但这只是我找到代码的地方):

!"" // 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

如果是这样,这有什么目的?


阅读 569

收藏
2020-05-01

共1个答案

一尘不染

new Boolean(false)返回一个不为null 的 对象 。非空对象始终是真实的。

结果,!任何非null对象将始终为false。


为了向自己证明,您可以在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"
2020-05-01