为什么“true”== true在JavaScript中显示false?

MDC描述==运算符如下:

如果两个操作数的类型不同,JavaScript会转换操作数,然后进行严格比较。 如果任一操作数是数字或布尔值,则操作数尽可能转换为数字; 否则,如果其中一个操作数是一个字符串,则另一个操作数将尽可能转换为字符串。

考虑到这一点,我会评估"true" == true ,如下所示:

  • 他们是同一类型的吗? 没有
  • 操作数是数字还是布尔值?
  • 我们可以将两者都转换为数字吗? isNaN(Number("true")) // true
  • 操作数是字符串吗?
  • 我们可以将另一个操作数转换为字符串吗? String(true) === "true" // true
  • 我已经结束了字符串"true""true" ,它应该评估为true ,但JavaScript显示为false。

    我错过了什么?


    因为"true"转换为NaN ,而true则转换为1 。 所以他们不同。

    就像你所报道的,两者都被转换为数字,因为至少可以是true (参见Erik Reppen的评论),然后进行比较。


    ==在Ecma 5中定义的比较运算符为

  • 如果Type(x)是Number且Type(y)是String,则返回比较结果x == ToNumber(y)。
  • 如果Type(x)是String而Type(y)是Number,
  • 如果Type(x)是布尔型,则返回比较结果ToNumber(x)== y。
  • 如果Type(y)是布尔型,则返回比较结果x == ToNumber(y)。
  • 所以,“true”== true被js引擎解释为

  • “true”== toNumber(true)
  • “true”== 1
  • toNumber(“true”)== 1
  • NaN == 1
  • ===>错误


    根据抽象平等比较算法

    http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3

    如果其中一个操作符是布尔值,而其他操作符不是,则布尔值将转换为数字0或1.所以true == "true"为false。

    链接地址: http://www.djcxy.com/p/72863.html

    上一篇: Why does "true" == true show false in JavaScript?

    下一篇: What is !! in javascript?