【问题标题】:Why false == "false" is false?为什么 false == "false" 是假的?
【发布时间】:2016-12-13 08:14:49
【问题描述】:

我还在学习 javaScript 的基础知识,但我不明白为什么会这样。

具有强制类型false == "false"将被转换为:

false == false //true

"false" == "false" //true

那么,为什么false == "false" 是假的?

【问题讨论】:

  • 因为其中一个是布尔值,另一个是字符串。
  • 谢谢:):) 我刚刚尝试过true == "true" 和结果false。非常快的答案:)
  • 数据类型不同,一个是布尔值,一个是字符串
  • @viery365,在这里查看第二张表(几乎是昆汀的回答):javascriptweblog.wordpress.com/2011/02/07/…
  • @GerardoFurtado 谢谢你:) 很棒的桌子:)

标签: javascript


【解决方案1】:

您误解了type conversion rulesfalse 在比较之前不会转换为字符串。

如果 Type(x) 是 Boolean,则返回比较结果 ToNumber(x) == y。

false 被转换为一个数字,得到:

+0 == "false"

……然后……

如果 Type(x) 是 Number 并且 Type(y) 是 String, 返回比较结果 x == ToNumber(y)。

"false" 被转换为一个数字,得到:

+0 == NaN

……这是错误的。

【讨论】:

  • 这是我正在寻找的答案。我必须更好地理解类型强制的规则。当然,我一直在考虑使用 === 但我需要了解这一点。谢谢:)我会在几分钟内接受答案。
  • 因此 false === "0" 会变成 true。
  • @sahaj 谢谢!:) 是的,现在我明白了:)
  • @sahaj - 不是=== 它不会。
  • 是的,请原谅我的拼写错误。应该是==。即 false == "0" 将导致 true。
【解决方案2】:

答案是因为 "false" 是一个字符串(正如 Gerardo Furado 在 cmets 中指出的那样),您所做的测试等同于 false = "hello"。

Javascript 不会查看字符串中的单词来确定它是否是布尔值,然后尝试从中获取值。

注意:

通常在 javascript 中,现在最好使用 === 运算符,以避免所有这些。

【讨论】:

    【解决方案3】:
    false == "false" // false
    

    因为boolean false被转换成0,所以,我们比较0和“false”,输出为false

    【讨论】:

      【解决方案4】:

      这些是不同种类的物品。 "string"boolean

      所以:

      false.toString() == "false"
      

      【讨论】:

      • 使用双等号,无论右侧是什么字符串,这始终是正确的。
      猜你喜欢
      • 2014-05-01
      • 1970-01-01
      • 2023-02-23
      • 2015-03-22
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 2015-03-15
      相关资源
      最近更新 更多