我是否正确地说:
if (y === x) {
//statement a
} else {
//statement b
}
比这更有效:
if (y !== x) {
//statement b
} else {
//statement a
}
注意:陈述的顺序。
答案 0 :(得分:1)
首先我会说“不”,或者至少它不能可靠地决定,因为它最终总是依赖于实现。
话虽如此,!==
还有一个在说明书中描述的附加步骤,即返回与比较结果相反的步骤。否则它们是相同的。
11.9.4严格等于运算符(===)
生产EqualityExpression:EqualityExpression === RelationalExpression评估如下:
- 让lref成为评估EqualityExpression的结果。
- 让lval成为GetValue(lref)。
- 让rref成为评估RelationalExpression的结果。
- 让rval为GetValue(rref)。
- 返回执行严格相等比较rval === lval的结果。 (见11.9.6)
醇>11.9.5严格不等于运营商(!==)
生产EqualityExpression:EqualityExpression!== RelationalExpression评估如下:
- 让lref成为评估EqualityExpression的结果。
- 让lval成为GetValue(lref)。
- 让rref成为评估RelationalExpression的结果。
- 让rval为GetValue(rref)。
- 设r是执行严格相等比较rval === lval的结果。 (见11.9.6)
- 如果r为true,则返回false。否则,返回true。
醇>
我会让你决定是否应关注这一步骤,但同样,这只是语言规范。谁知道实现的技巧。
答案 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毫秒之内运行。做任何你想做的事,但速度都一样。