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

IT技术 javascript language-design
2021-02-08 00:11:25

来自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

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

2个回答

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

因此,!任何非空对象的结果都将始终为假。


为了向自己证明这一点,您可以在 javascript 控制台中运行它

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

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

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

顺便说一句,将Boolean函数作为函数调用- 没有 new - 实际上确实返回了一个原语

!Boolean(false) // true

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

因为new Boolean返回的对象如此处所述

!定义如下

11.4.9 逻辑非运算符 ( !)

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

  1. expr是评估UnaryExpression的结果

  2. oldValueToBoolean(GetValue(expr))

  3. 如果oldValuetrue,则返回false

  4. 返回true

9.2 ToBoolean

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

表 11 — ToBoolean 转换

参数类型 - 结果

...

目的 - true

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