我这样说是否正确:
if (y === x) {
//statement a
} else {
//statement b
}
比这更有效:
if (y !== x) {
//statement b
} else {
//statement a
}
注意:语句的顺序。
我这样说是否正确:
if (y === x) {
//statement a
} else {
//statement b
}
比这更有效:
if (y !== x) {
//statement b
} else {
//statement a
}
注意:语句的顺序。
首先我会说“不”,或者至少不能可靠地决定它,因为它最终总是依赖于实现。
话虽如此,!==
规范中描述了一个额外的步骤,即返回与比较结果相反的结果。否则它们是相同的。
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 为真,则返回假。否则,返回真。
我会让您决定是否应该关注该步骤,但同样,这只是语言规范。谁知道这些实现有什么技巧。
=== 必须比较两个变量的每个字符(如果它们有多个),而 !== 如果第一个字符不匹配,则可能会很快失败。所以 !== 应该快一点,但通常好处很小,你不会注意到它们。我还推荐 Pointy 的方式来寻找更好的逻辑。
不,它们非常相似。我创建了一个 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 毫秒内运行。做任何你想做的事,但他们的速度是一样的。