在javascript中使用if(someBoolean)vs if(someBoolean==true)
我想知道在javascript这样的弱类型语言中,使用在javascript中使用if(someBoolean)vs if(someBoolean==true),javascript,boolean,Javascript,Boolean,我想知道在javascript这样的弱类型语言中,使用 var someBool=true; if (someBool==true){ //Somecode } 或者只是使用 if(someBool){ //Somecode } 执行速度是否存在差异,或者是否存在语义差异,或者只是其中一个优于另一个?是的,有一点语义差异。如果您有不同类型的值(例如,),则==比较更有效,而if仅检查是否存在错误 但是,如果已知someBool始终是一个布尔值,则不应与true进行比较,而应始终
var someBool=true;
if (someBool==true){
//Somecode
}
或者只是使用
if(someBool){
//Somecode
}
执行速度是否存在差异,或者是否存在语义差异,或者只是其中一个优于另一个?是的,有一点语义差异。如果您有不同类型的值(例如,),则
==
比较更有效,而if
仅检查是否存在错误
但是,如果已知
someBool
始终是一个布尔值,则不应与true
进行比较,而应始终使用第二个变量。如果要检查someBool
实际上是否为true
,请使用严格相等比较器(==
):
这也适用于其他类型:
0 == "0"; // true
0 === "0"; // false
正如其他人所指出的,平等性测试(使用==
)与“真实性”测试(仅使用if()
)之间存在差异。这绝对值得了解,但就我个人而言,我尽量避免编写含义不是100%清楚的代码。给定变量的名称(someBool
),我希望是一个布尔值,因此我将测试布尔值。如果我想知道它是否大于0
,我会测试它(someNumber>==0
)
至于表现,;严格相等比较器通常比使用
==
更有效,但差别可以忽略不计。测试真实性可能会快一点,但这仍然是一个微观优化,很少值得费心。语义差异很大,如下所示:
if (x)
具有以下语义:
- 确定
的值李>x
- 如果值未定义、null、zero、NaN、空字符串或false,则该条件视为false,否则视为true
if(x==true)
具有以下语义:
- 确定
的值x
- 如果该值为真,则条件为真
- 如果该值为false,则该条件为false
- 否则,假设用户实际编写了
if(x==1)
然后重新开始
我不打算通过所有的逻辑来确定一个表达式是否等于1;如果您想了解详细信息,可以阅读ECMAScript规范第3版的11.9.3节。您是否已经知道表达式只能是true或false?我不确定在布尔上下文中,但在JavaScript中始终使用===以便进行适当的强制。@Eric。不,我不知道,那只是个玩笑example@scrblnrd3然后,正如eric指出的,您需要使用===而不是if(someBool),这样您就有了适当的条件。在我看来,在任何语言(好的,好的,任何传统的C类语言,或任何类似语言)中,显式比较布尔常量都是一种反模式。如果语言的语句语法需要布尔值表达式,那么与布尔常量的比较充其量也是可疑的。
someBool=true;(someBool==2)
将返回false
,我认为这是一个很大的区别。=
检查是否相等,而不是真实性。例如,2==true
是false
,而两者都是真的。@Teemu:是的,但您永远不会在代码中使用它。它太脆弱,太容易被其他程序员(或你未来的自己)误解。@OP:如果你不喜欢1==true
求值为true,你可以使用1==true
。
if (x)