JavaScript If/Else条件&;比较-差异
好的,这是我的小问题: 我知道JavaScript If/Else条件&;比较-差异,javascript,casting,comparison,boolean,conditional-statements,Javascript,Casting,Comparison,Boolean,Conditional Statements,好的,这是我的小问题: 我知道==和==操作符将比较类型,然后比较值,然后比较==和=将强制转换类型,然后只比较值 如果(myVar)和如果(!myVar)呢 如果(myVar==true)和如果(myVar==false),行为是否有任何区别?是的,有区别。例如: if('true' == true) { alert("This doesn't happen"); } if('true') { alert("But this does happen."); } 原因是什么?
==
和==
操作符将比较类型,然后比较值,然后比较==
和=代码>将强制转换类型,然后只比较值
如果(myVar)
和如果(!myVar)
呢
如果(myVar==true)和
如果(myVar==false)
,行为是否有任何区别?是的,有区别。例如:
if('true' == true) {
alert("This doesn't happen");
}
if('true') {
alert("But this does happen.");
}
原因是什么?它们都转换为number
s进行比较<代码>'true'转换为NaN
,true
转换为1
避免这种愚蠢行为,永远不要写
==true
或==false
是的,这是有区别的。如前所述,如果将值与==
进行比较,则会进行类型转换
如果值的类型不同,则它们都将转换为字符串或数字。如果其中一个值是布尔值,而另一个不是布尔值,则两个值都将转换为数字
中定义了比较算法。重要的一步是:
七,。如果类型(y)是布尔值,则返回比较结果x==ToNumber(y)
因此,首先将true
转换为一个数字,然后将myVar
转换为一个数字
如果您只有
If(myVar)
,那么:
二,。如果ToBoolean(GetValue(exprRef))
为true,则
并且可以返回非常不同的结果
注意:如果
myVar
实际上是一个布尔值,那么If(myVar==true)
和If(myVar)
是的,If(myVar)和If(!myVar)
如果(myVar==true)和If(myVar==false)
在if(myVar)和if(!myVar)
中!myVar将为每个“false”值返回true(空字符串、0、null、false、未定义、NaN)
而if(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).
是的,他们不一样。这件事已经讨论过好几次了,是的。请看这两个相关的问题:谢谢,这是对我最好的解释。它是否包含任何内容的确切含义是什么?@FelixKling它显然意味着如果它是
null、false、NaN、undefined、“、+0或-0
:P@FelixKling:“false”值,即空字符串、0、null、false、未定义、NaNYeah,我猜是这样;)但是用词不太准确。对不起,吹毛求疵。