为什么“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中定义的比较运算符为
所以,“true”== true被js引擎解释为
===>错误
根据抽象平等比较算法
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
如果其中一个操作符是布尔值,而其他操作符不是,则布尔值将转换为数字0或1.所以true == "true"
为false。