一尘不染

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

javascript

MDC对==操作员的描述如下:

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

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

  1. 它们是同一类型吗? 没有
  2. 操作数是数字还是布尔值?
  3. 我们可以将它们都转换为数字吗? isNaN(Number("true")) // true
  4. 任一操作数都是字符串吗?
  5. 我们可以将另一个操作数转换为字符串吗? String(true) === "true" // true

我最终得到了字符串"true""true",其结果应为true,但是JavaScript显示为false。

我错过了什么?


阅读 350

收藏
2020-05-01

共1个答案

一尘不染

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

就像您报告的那样,两者都被转换为数字,因为至少true可以被转换(请参阅Erik Reppen的评论),然后进行比较。

2020-05-01