这段代码花了很长时间才被注意到。
我想如果我做了以下,那就没问题了
if('true' == true) {
alert("Does not happen");
}
但它没有通过if条件。
我认为双等于==
匹配的值不是类型,因为匹配类型是===
的作业。
现在我的问题是为什么不true
对'true'
进行类型转换,或者为什么要检查这些操作数的类型?
答案 0 :(得分:8)
'true' == true
这就是这里发生的事情(根据rules):
- 将布尔值转换为数字(规则7):
'true' == 1
- 将'true'转换为Number(规则5):
Number('true') == 1
- Number('true')
是NaN
:
NaN == 1
- 返回false(规则1.c.i)
==
确实令人困惑,但一旦理解了规则,它就会有所帮助:
答案 1 :(得分:4)
Javascript的==
是在没有可理解逻辑的情况下构建的语言中最糟糕的部分之一......我们遇到了旧的规范,这只是答案。
在完整的Facepalm上获取战利品:
https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Sameness
修改编辑
是的,'类型转换'无法正常工作......没有其他答案......:/
答案 2 :(得分:4)
请参阅rules for ==
。
Type(x)
是一个字符串,Type(y)
是一个布尔值。所以第7步适用。它将布尔值转换为数字并将其与字符串进行比较。您赢得的字符串不匹配任何数字。
答案 3 :(得分:1)
布尔值,如果参数为真,则结果为1。如果参数为false,则结果为+0。因此,'true' == true
相当于'true' == 1
,这当然是假的。