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

发布于 2024-12-24 17:41:06 字数 641 浏览 1 评论 0原文

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

如果是的话,这样做有何目的?

From the jQuery documentation on JavaScript types comes this snippet of code describing the behavior of strings when converted to booleans (that topic is not related to this question, but it's just where I found the code):

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

I get the first three examples, but I don't get the last example, because:

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

So I would assume:

!new Boolean(false) // true

But instead:

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

What is this I don't even...

Is it because:

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

If so, what purpose does this serve?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

八巷 2024-12-31 17:41:06

new Boolean(false) 返回一个对象。所有对象(浏览器中的 document.all 除外)都是 真实

因此,任何对象的 ! 都将始终为 false


为了向自己证明这一点,您可以在 JavaScript 控制台中运行以下代码:

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

此外,您可以使用严格相等运算符 === 来确认 new Boolean(false) 是不是真的 false

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

顺便说一句,将 Boolean 函数作为函数调用(不使用 new)实际上会返回一个原语:

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

new Boolean(false) returns an object. All objects (except document.all in browsers) are truthy.

As a result, ! of any object will always be false.


To prove it to yourself, you can run this in your JavaScript console:

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

Also, you can use the strict equality operator === to confirm that new Boolean(false) isn’t really false:

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

Incidentally, calling the Boolean function as a function—without the new—actually does return a primitive:

!Boolean(false) // true
(typeof Boolean(false)) // "boolean"
忆伤 2024-12-31 17:41:06

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

! 定义如下

11.4.9 逻辑 NOT 运算符 ( ! )

产生式 UnaryExpression! UnaryExpression 计算如下:

  1. exprUnaryExpression的计算结果。

  2. oldValueToBoolean(GetValue(expr))

  3. 如果oldValuetrue,则返回false

  4. 返回true

9.2 布尔值

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

表 11 — ToBoolean 转换

参数类型 - 结果

...

对象 - true

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

Because new Boolean returns an object as stated here.

The ! is defined as follows:

11.4.9 Logical NOT Operator ( ! )

The production UnaryExpression : ! UnaryExpression is evaluated as follows:

  1. Let expr be the result of evaluating UnaryExpression.

  2. Let oldValue be ToBoolean(GetValue(expr)).

  3. If oldValue is true, return false.

  4. Return true.

and:

9.2 ToBoolean

The abstract operation ToBoolean converts its argument to a value of type Boolean according to Table 11:

Table 11 — ToBoolean Conversions

Argument Type - Result

...

Object - true

So, it is an object, thus ToBoolean returns true, hence ! returns false.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文