我想知道在弱类型语言(如 javascript)中是否存在显着差异
var someBool=true;
if (someBool==true){
//Somecode
}
或者只是使用
if(someBool){
//Somecode
}
执行速度是否存在差异,或者是否存在一些语义差异,或者只是一个优于另一个?
我想知道在弱类型语言(如 javascript)中是否存在显着差异
var someBool=true;
if (someBool==true){
//Somecode
}
或者只是使用
if(someBool){
//Somecode
}
执行速度是否存在差异,或者是否存在一些语义差异,或者只是一个优于另一个?
语义差异相当大,具体如下:
if (x)
具有语义:
x
。if (x==true)
具有语义:
x
。if (x==1)
并重新开始。
我不打算通过所有逻辑来确定表达式是否等于 1。如果您想了解详细信息,可以阅读 ECMAScript 规范修订版 3 的第 11.9.3 节。
是的,有一点语义差异。如果您有不同类型的==
值(例如,布尔值与数字比较中的 JavaScript 真实性,Javascript If 语句的语义是什么),则比较会做得更多,而if
只检查真实性。
然而,如果someBool
总是知道是一个布尔值,你不应该与比较true
,而总是使用第二个变体。
如果您想检查它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快==
一点,但差异可以忽略不计。真实性测试可能会更快一些,但这仍然是一个微优化,很少值得麻烦。