为什么真的不匹配';正确';双等号'==';用JavaScript?
这一小部分代码花了很长时间才被注意到 我想如果我做下面的事情,那就好了为什么真的不匹配';正确';双等号'==';用JavaScript?,javascript,if-statement,casting,Javascript,If Statement,Casting,这一小部分代码花了很长时间才被注意到 我想如果我做下面的事情,那就好了 if('true' == true) { alert("Does not happen"); } 但它没有通过if条件 我认为double equals=匹配的是值而不是类型,因为匹配类型是=的工作 现在我的问题是为什么true类型转换为'true',或者为什么它要检查这些操作数的类型?Javascript的=是语言中最糟糕的部分之一,它是在不可理解的逻辑下构建的。。。我们有一个旧的规范,这就是答案 在完整的Fac
if('true' == true) {
alert("Does not happen");
}
但它没有通过if条件
我认为double equals=
匹配的是值而不是类型,因为匹配类型是=
的工作
现在我的问题是为什么
true
类型转换为'true'
,或者为什么它要检查这些操作数的类型?Javascript的=
是语言中最糟糕的部分之一,它是在不可理解的逻辑下构建的。。。我们有一个旧的规范,这就是答案
在完整的Facepalm上获取战利品:
为编辑进行编辑
是的,“类型转换”并不像我们预期的那样有效。。。没有其他答案/ 请参阅
Type(x)
是字符串,Type(y)
是布尔值。因此,第7步适用。它将布尔值转换为数字,并将其与字符串进行比较。您拥有的字符串与任何数字都不匹配。在JavaScript boolean中,如果参数为true,则结果为1。如果参数为false,则结果为+0。因此,'true'==true
相当于'true'==1
,当然,这是false
'true' == true
这就是发生在这里的事情(根据:
--将布尔值转换为数字(规则7):
--将“真”转换为数字(规则5):
--Number('true')
是NaN
:
NaN == 1
--返回false(规则1.c.i)
=
确实令人困惑,但一旦你理解了规则,它就有了一些意义:
- 垃圾等于垃圾(未定义==null)
- 没有布尔值(它们作为数字进行比较)
- 如果其中一个部分是数字,请比较数字
- 如果其中一个部分是字符串,请将其作为字符串进行比较
- 否则,a和b必须是相同的东西李>
true
是布尔值,即string==boolean迄今为止最好(也是最简单)的解释!我不认为这就是这个算法在这里的工作原理。正确的步骤顺序是7-5-1.c.i.@thg435-Argh!我错过了类型(y)
以及所有类型(x)
都在那里。嗯,这并不能回答问题。两个操作数的转换完全按照规范进行,应该接受thg435的答案。
Number('true') == 1
NaN == 1