好的,这是我的简短问题:
我知道===
and!==
运算符将比较类型然后是值,==
并且!=
会转换类型然后只比较值。
if(myVar)
和怎么样if(!myVar)
?
if(myVar == true)
和的行为有什么不同if(myVar == false)
吗?
好的,这是我的简短问题:
我知道===
and!==
运算符将比较类型然后是值,==
并且!=
会转换类型然后只比较值。
if(myVar)
和怎么样if(!myVar)
?
if(myVar == true)
和的行为有什么不同if(myVar == false)
吗?
是,有一点不同。例如:
if('true' == true) {
alert("This doesn't happen");
}
if('true') {
alert("But this does happen.");
}
原因?它们都转换为number
s 以进行比较。'true'
转换为NaN
并true
转换为1
。
避免这种愚蠢,永远不要写== true
or == false
。
是,有一点不同。正如您已经提到的,如果您将 value 与 进行比较,则会==
发生类型转换。
如果值的类型不同,它们都将被转换为字符串或数字。如果其中一个值是布尔值而另一个不是,则两个值都将转换为数字。
比较算法在规范的第 11.9.3 节中定义。重要的步骤在这里:
7. 如果 Type(y) 为 Boolean,则返回比较结果
x == ToNumber(y)
。
所以true
先转换为数字,然后myVar
再转换为数字。
如果您只有if(myVar)
,那么该值将转换为 boolean:
2.如果
ToBoolean(GetValue(exprRef))
是真的,那么
ToNumber
[spec]和ToBoolean
[spec]可以返回非常不同的结果。
注意:如果实际上是一个布尔值,那么和myVar
之间没有区别。if(myVar == true)
if(myVar)
是的,两者差别 if(myVar) and if(!myVar)
很大if(myVar == true) and if(myVar == false)
在if(myVar) and if(!myVar)
中,!myVar 将为每个“假”值返回真(空字符串、0、null、假、未定义、NaN)
whileif(myVar == true)
并if(myVar == false)
检查 myVar 值是真还是假。即使 myVar 值为 NULL、NaN 或未定义的 0,它也会比较
if(NULL == true)
加起来 :
NOT operator'!' converts a value into its opposite boolean equivalent. This is different than actually comparing two values.
And if you compare values with '==', JavaScript does type conversion which can lead to unexpected behavior (like undefined == null).