3

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

我知道===and!==运算符将比较类型然后是值,==并且!=会转换类型然后只比较值。

if(myVar)和怎么样if(!myVar)

if(myVar == true)和的行为有什么不同if(myVar == false)吗?

4

3 回答 3

3

是,有一点不同。例如:

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

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

原因?它们都转换为numbers 以进行比较。'true'转换为NaNtrue转换为1

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

于 2012-06-20T17:45:25.823 回答
2

是,有一点不同。正如您已经提到的,如果您将 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)

于 2012-06-20T17:48:39.543 回答
1

是的,两者差别 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).
于 2012-06-20T17:57:04.410 回答