JavaScript if/else 条件和比较 - 差异

JavaScript If/Else Conditions & Comparisons - Differences

本文关键字:比较 差异 条件 if else JavaScript      更新时间:2023-09-26

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

我知道===!==运算符将比较类型,然后比较值,==!=将强制转换类型,然后只比较值。

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 以进行比较。 'true'转换为NaNtrue转换为1

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

是的,有区别。如前所述,如果将值与 == 进行比较,则会进行类型转换

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

比较算法在规范的第 11.9.3 节中定义。重要的步骤在这里:

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

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


但是,如果您只有if(myVar),则该值将转换为布尔值:

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 将为每个 "false" 值返回 true(空字符串, 0, null, false, undefined, 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).