MDC对==操作员的描述如下:
==
如果两个操作数的类型不同,则JavaScript会转换操作数,然后进行严格比较。如果操作数是数字或布尔值,则在可能的情况下将操作数转换为数字;否则,操作数将转换为数字。否则,如果其中一个操作数是字符串,则另一个操作数将尽可能转换为字符串。
考虑到这一点,我将评估"true" == true如下:
"true" == true
isNaN(Number("true")) // true
String(true) === "true" // true
我最终得到了字符串"true"和"true",其结果应为true,但是JavaScript显示为false。
"true"
true
我错过了什么?
因为"true"转换为NaN,而true则转换为1。所以他们不同。
NaN
1
就像您报告的那样,两者都被转换为数字,因为至少true可以被转换(请参阅Erik Reppen的评论),然后进行比较。