Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中使用if(someBoolean)vs if(someBoolean==true)_Javascript_Boolean - Fatal编程技术网

在javascript中使用if(someBoolean)vs if(someBoolean==true)

在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进行比较,而应始终

我想知道在javascript这样的弱类型语言中,使用

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)