在Javascript中比较值的最佳实践是什么?

3

通常,我会通过将布尔值放入if语句中来比较它,如下所示:

var foo = 'Foo data';
if ( foo ) {
    // Do somethings
}

最近,我看到一些人在比较之前将变量转换为布尔类型:

if ( !!foo ) { 
    // Do somethings
}

这两个方案在性能或优势上有什么不同?哪一个更可取?


1
你想要的方式...请查看此链接:https://dev59.com/jXRA5IYBdhLWcg3w6SRH - Mihai Iorga
2
这篇博客文章似乎相关且有帮助。 - Sukima
3个回答

7

如此示例中的fiddle所示,比较中没有任何功能上的差异 http://jsfiddle.net/aeujgovd/1

if(foo){}
if(!!foo){}

使用 !! 的唯一原因是将真值/假值的值强制转换为布尔值,例如,如果您的 API 期望一个正确的布尔值而不是像 0 或 1 这样的标志。
var myObj = {flag: 0};
function submitObj(myObj){
    myObj.flag = !!myObj.flag;
    // ... Ajax submit
}

4

来自ECMAScript语言规范第12.5节:

12.5 if语句

...

IfStatement: if (Expression) Statement的产生式的求值过程如下:

  1. exprRef成为评估Expression的结果。
  2. 如果ToBoolean(GetValue(exprRef))false,则返回(normal, empty, empty)
  3. 返回评估Statement的结果。

从这里我们可以看到,无论传入的表达式是否已经是布尔值,ToBoolean()都会在其上使用。

因此,我认为 if (foo) 不太可能比 if (!!foo) 造成更大的性能损失,并且在 JavaScript 文件中由两个 ! 字符引起的两个额外字节可能会抵消将值转换为布尔值的任何奖励。无论如何,在 if 语句中进行转换的效果。

0

如果可以避免转换...从性能角度来看,总是更好的选择。 如果你只想检查foo是否为空,我会选择第一种选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接