比较Javascript值的最佳做法是什么?

时间:2015-01-15 13:08:40

标签: javascript

通常情况下,我只需将它放在if语句中即可比较一个布尔值,如下所示:

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

最近,我刚看到一些人在比较之前将变量转换为boolean:

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

在性能或优势方面有什么不同吗?哪个更优选?

3 个答案:

答案 0 :(得分:7)

相比之下没有功能上的差异,正如这个小提琴http://jsfiddle.net/aeujgovd/1

所示
if(foo){}
if(!!foo){}

使用的唯一理由!!例如,如果你的API期望一个合适的布尔值而不是像0或1这样的标志,那么就是从truthy / falsey值强制一个布尔值。

var myObj = {flag: 0};
function submitObj(myObj){
    myObj.flag = !!myObj.flag;
    // ... Ajax submit
}

答案 1 :(得分:4)

来自ECMAScript Language Specification的第12.5节:

  

12.5 if声明

     

...

     

生产IfStatement:if ( Expression )语句的评估如下:

     
      
  1. exprRef成为评估表达式的结果。
  2.   
  3. 如果ToBoolean(GetValue(exprRef))false,请返回(normal, empty, empty)
  4.   
  5. 返回评估Statement的结果。
  6.   

从这里可以看出,ToBoolean()用于传入的表达式,无论它是否已经是布尔值。

正因为如此,我要说if (foo)不太可能导致性能下降超过if (!!foo),并且由!引起的两个额外字节无论如何,JavaScript文件中的字符可能会超过将if语句中的值转换为布尔值的任何奖励。

答案 2 :(得分:0)

如果你可以避免转换......在性能方面总是更好。 如果你想要实现的只是检查foo是否为null,我会选择第一个选项。