MDC describes the ==
operator as follows:
如果两个操作数的类型不同,JavaScript会转换操作数,然后应用严格比较。如果操作数是数字或布尔值,操作数将尽可能转换为数字;否则,如果任一操作数是一个字符串,则另一个操作数将转换为字符串(如果可能)。
考虑到这一点,我会按如下方式评估"true" == true
:
isNaN(Number("true")) // true
)String(true) === "true" // true
)我最终得到的字符串"true"
和"true"
应该评估为true
,但JavaScript显示为false。
我错过了什么?
答案 0 :(得分:80)
由于"true"
已转换为NaN
,而true
转换为1
。所以他们不同。
与您报告的一样,两者都转换为数字,因为至少true
可以(参见Erik Reppen的评论),然后进行比较。
答案 1 :(得分:4)
== comparison operator defined in Ecma 5 as
所以,“true”== true被js引擎解释为
===>假
答案 2 :(得分:3)
根据抽象等式比较算法
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
如果其中一个oprends是布尔值而另一个不是布尔值,则布尔值转换为数字0或1.因此true == "true"
为假。
答案 3 :(得分:0)
考虑场景true == "true"进行解释。
直接,上面返回false,然而,我们的期望是true
JavaScript 使用抽象相等比较算法,所以根据算法
true == "true"
// If one of the operands is Boolean, convert the Boolean operand to 1 if it is true and +0 if it is false
ConvertToNumber(true) == "true"
1 == "true"
// When the algorithm finds the above statements, it thinks that it needs to do one more conversion -
// "When comparing a number to a string, try to convert the string to a numeric value"
1 == ConvertToNumber("true)
1 == NaN
// Which returns false