'==='比'!=='更有效吗?

时间:2013-06-01 13:44:27

标签: javascript if-statement operators performance

我是否正确地说:

if (y === x) {
    //statement a
} else {
    //statement b
}

比这更有效:

if (y !== x) {
    //statement b
} else {
    //statement a
}

注意:陈述的顺序。

3 个答案:

答案 0 :(得分:1)

首先我会说“不”,或者至少它不能可靠地决定,因为它最终总是依赖于实现。

话虽如此,!==还有一个在说明书中描述的附加步骤,即返回与比较结果相反的步骤。否则它们是相同的。

  

11.9.4严格等于运算符(===)

     

生产EqualityExpression:EqualityExpression === RelationalExpression评估如下:

     
      
  1. 让lref成为评估EqualityExpression的结果。
  2.   
  3. 让lval成为GetValue(lref)。
  4.   
  5. 让rref成为评估RelationalExpression的结果。
  6.   
  7. 让rval为GetValue(rref)。
  8.   
  9. 返回执行严格相等比较rval === lval的结果。 (见11.9.6)
  10.         

    11.9.5严格不等于运营商(!==)

         

    生产EqualityExpression:EqualityExpression!== RelationalExpression评估如下:

         
        
    1. 让lref成为评估EqualityExpression的结果。
    2.   
    3. 让lval成为GetValue(lref)。
    4.   
    5. 让rref成为评估RelationalExpression的结果。
    6.   
    7. 让rval为GetValue(rref)。
    8.   
    9. 设r是执行严格相等比较rval === lval的结果。 (见11.9.6)
    10.   
    11. 如果r为true,则返回false。否则,返回true。
    12.   

我会让你决定是否应关注这一步骤,但同样,这只是语言规范。谁知道实现的技巧。

答案 1 :(得分:0)

===必须比较两个变量的每个字符(如果它们有多个),而!==如果第一个字符不匹配则会很快失败。所以!==应该快一点,但通常好处太小,你不会注意到它们。 我也建议Pointy寻找更好的逻辑。

答案 2 :(得分:0)

没有。它们非常相似。我创建了一个jsfiddle http://jsfiddle.net/rEtjn/

var date1,date2;
date1=new Date();
for(a=1;a<=10000;a++){
    if(i===a){
        console.log("hello!");
    }
    else{
        console.log("bye!");
    }
}
date2=new Date();
alert(date2-date1);
date1=new Date();
for(a=1;a<=10000;a++){
    if(i!==a){
        console.log("bye");
    }
    else{
        console.log("hi!");
    }
}
date2= new Date();
alert(date2-date1);

大多数时间两者都在10毫秒之内运行。做任何你想做的事,但速度都一样。