2

我想知道在弱类型语言(如 javascript)中是否存在显着差异

var someBool=true;
if (someBool==true){
    //Somecode
}

或者只是使用

if(someBool){
  //Somecode
} 

执行速度是否存在差异,或者是否存在一些语义差异,或者只是一个优于另一个?

4

3 回答 3

4

语义差异相当大,具体如下:

if (x)

具有语义:

  • 确定 的值x
  • 如果值为 undefined、null、零、NaN、空字符串或 false,则条件被认为是 false,否则被认为是 true。

if (x==true)

具有语义:

  • 确定 的值x
  • 如果值为真,则条件为真。
  • 如果值为假,则条件为假。
  • 否则,假装用户实际写了

if (x==1)

并重新开始。

我不打算通过所有逻辑来确定表达式是否等于 1。如果您想了解详细信息,可以阅读 ECMAScript 规范修订版 3 的第 11.9.3 节。

于 2013-02-26T16:01:30.453 回答
2

是的,有一点语义差异。如果您有不同类型的==值(例如,布尔值与数字比较中的 JavaScript 真实性Javascript If 语句的语义是什么),则比较会做得更多,而if只检查真实性

然而,如果someBool总是知道是一个布尔值,你不应该比较true,而总是使用第二个变体。

于 2013-02-26T15:18:58.183 回答
1

如果您想检查它someBool是否为true,请使用严格相等比较器 ( ===):

var someBool = 1;

someBool == true;  // true
someBool === true; // false

这也适用于其他类型:

0 == "0";  // true
0 === "0"; // false

==正如其他人指出的那样,测试相等性(使用)或测试“真实性”(使用 just )是有区别的if()。这绝对值得了解,但我个人尽量避免编写含义不是 100% 清楚的代码。给定变量 ( someBool) 的名称,我会期望一个布尔值,所以我会测试一个布尔值。如果我想知道它是否大于0,我会改为测试 ( someNumber >== 0)。

至于性能;严格相等比较器通常比 using==一点,但差异可以忽略不计。真实性测试可能会更快一些,但这仍然是一个微优化,很少值得麻烦。

于 2013-02-26T15:28:30.510 回答