【问题标题】:In javascript, why is the string "true", after coercion, still not equal to boolean true?在javascript中,为什么字符串“true”经过强制转换后仍然不等于布尔值true?
【发布时间】:2017-12-07 03:57:40
【问题描述】:

在 javascript 中,String(true) == "true" 评估为 true,Boolean("true") == true 评估为 true,那么为什么 "true" == true 评估为 false?

【问题讨论】:

  • 不按照你的逻辑...为什么要这样做?
  • 因为 JavaScript?
  • 也许你对使用Boolean("true") 感到困惑,因为Boolean("false") 也返回true。
  • 根据MDN 的布尔文档:"如果该值被省略或为 0、-0、null、false、NaN、未定义或空字符串 (""),该对象的初始值为 false。如果将 DOM 对象 document.all 作为参数传递,则新的布尔对象的初始值也为 false。所有其他值,包括任何对象或字符串“false” ,创建一个初始值为true的对象。"
  • 注意,你已经把类型强制的结果扔掉了。

标签: javascript types casting


【解决方案1】:

"true" == true 中,强制是数字。所以这就变成了:

NaN == 1

...这是false

loose equality operands table on mozilla.org 可能对检查有用。

【讨论】:

  • 疯了。这符合 Hennek 的回答,即布尔值被转换为数字,无论它位于比较器的哪一侧,显然?
  • 布尔值并不总是发生这种转换(mozilla.org 上的表格也显示),但实际上你可以这样想:松散相等的结果将与它。
【解决方案2】:

查看MDN(Mozilla 开发者网络)。当我们比较两个不同类型的操作数时,[抽象相等比较算法]会在比较之前尝试将它们转换为相同的类型

最后,答案如下:

如果其中一个操作数是布尔值,则布尔操作数如果为真则转换为 1,如果为假则转换为 +0。

然后

比较数字和字符串时,字符串会转换为数字值。 JavaScript 尝试将字符串数字文字转换为数字类型值。首先,数学值是从字符串数字文字派生的。接下来,将此值四舍五入到最接近的 Number 类型值。

所以,最后,我们比较 Nan == 1 与 @trincot 所指出的 false

【讨论】:

    猜你喜欢
    • 2020-03-08
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2021-06-23
    • 2014-07-06
    • 2017-01-08
    相关资源
    最近更新 更多