JavaScript If / Else条件&比较 - 差异

时间:2012-06-20 17:42:25

标签: javascript casting comparison boolean conditional-statements

好的,这是我的简短问题:

我知道===!==运算符会比较类型和值,而==!=会转换类型,然后只比较值

if(myVar)if(!myVar)呢?

if(myVar == true)if(myVar == false)的行为是否存在差异?

3 个答案:

答案 0 :(得分:3)

是的,有区别。例如:

if('true' == true) {
    alert("This doesn't happen");
}

if('true') {
    alert("But this does happen.");
}

原因?他们都转换为number进行比较。 'true'转换为NaNtrue转换为1

避免这种愚蠢,永远不要写== true== false

答案 1 :(得分:2)

是的,有区别。正如您已经提到的,如果您将值与==进行比较,则会发生类型转换

如果值属于同一类型,则它们都将转换为字符串数字。如果其中一个值是布尔值而另一个值不是,则两个值都将转换为数字

比较算法在section 11.9.3 of the specification中定义。重要的一步是:

  

7。如果Type(y)是布尔值,则返回比较结果x == ToNumber(y)

首先将true转换为数字,然后将myVar转换为数字。


如果您只有if(myVar),那么the value is converted to a boolean

  

2。如果ToBoolean(GetValue(exprRef))为真,那么


ToNumber [spec]ToBoolean [spec]可能会返回截然不同的结果。


注意:如果myVar实际上是布尔值,则if(myVar == true)if(myVar)之间没有区别。

答案 2 :(得分:1)

是的,if(myVar) and if(!myVar)if(myVar == true) and if(myVar == false)

都存在巨大差异

if(myVar) and if(!myVar)中,!myVar将为每个“false”值返回true(空字符串,0,null,false,undefined,NaN)

while if(myVar == true)if(myVar == false)检查myVar值是true还是false。即使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).
相关问题