条件1
for( var i = 0; i < 1000; i++ ) {
if( i != 0 ) {
console.log("i is not zero.!");
} else {
console.log("i is zero.!");
}
}
条件2
for( var i = 0; i < 1000; i++ ) {
if( i == 0 ) {
console.log("i is zero.!");
} else {
console.log("i is not zero.!");
}
}
哪种方法更可取(我的意思是更合适)。?
这两者之间是否有任何性能差异。?
答案 0 :(得分:1)
还有另一种方法可以做到这一点:
body,button,input{font-family:sans;font-size:8pt;padding:0pt}div{font-size:12pt;}
有一点 bench :
Loop: <input id=loopcnt value="3000000" size="8" />
<button id="==" onclick="run(event)">if == {} else {}</button>
<button id="!=" onclick="run(event)">if != {} else {}</button>
<button id="(=" onclick="run(event)">( == ? "" : "" )</button>
<button id="(!" onclick="run(event)">( != ? "" : "" )</button>
<div id="elapsed"></div>
&#13;
!=
&#13;
==
&#13;
使用 firefox 或 chrome ,没有明显的区别,但 Spidermonkey 似乎通过使用{{1}更快地做事情而不是使用time smjs <<<'
for( var i = 0; i < 10000000; i++ ) {
if ( i == 0 ) { var log="i is zero.!"; }
else { var log="i is not zero.!"; } } '
real 0m0.054s
user 0m0.044s
sys 0m0.004s
time smjs <<<'
for( var i = 0; i < 10000000; i++ ) {
if ( i != 0 ) { var log="i is not zero.!"; }
else { var log="i is zero.!"; } } '
real 0m0.043s
user 0m0.040s
sys 0m0.000s
time smjs <<<'
for( var i = 0; i < 10000000; i++ ) {
var log=(i==0?"i is zero.!":"i is not zero.!"); } '
real 0m0.051s
user 0m0.048s
sys 0m0.000s
time smjs <<<'
for( var i = 0; i < 10000000; i++ ) {
var log=(i!=0?"i is not zero.!":"i is zero.!"); } '
real 0m0.049s
user 0m0.040s
sys 0m0.008s
:
{{1}}
但是这并没有经过充分测试(在真正免费的主机上,通过大量的测试和完整的统计数据)。
答案 1 :(得分:0)
这两种方法都会产生相同的结果。这两种方法之间没有任何性能和效率差异。你可以使用其中任何一个。
答案 2 :(得分:0)
在条件1 和条件2 中,输出将为
i is zero.!
然后是999次
i is not zero.!
答案 3 :(得分:0)
您可能听说过处理器如何预测是否跳转,以便同时计算多个相关操作。这在某些情况下是相关的,但在您的情况下,无论您执行哪些操作,处理器都会正确预测。
无论如何,这样的事情充其量只能达到纳秒。当你关于核心机制而不是常规应用程序时,你会考虑这些因素。 我甚至不确定这样的东西是否适用于JavaScript,可能不是,因为它被解释了。
最有可能的是,对于你的程序来说,跟上可读性这样的事情会更加重要。
答案 4 :(得分:0)
例如,如果您使用稀疏矩阵并且您不知道值但知道大多数项目的值为零,则最好使用条件2.
如果您无法估算零计数,最好使用:
for( var i = 0; i < 1000; i++ ) {
bool a = i;
switch(a){
case true:
console.log("i is not zero");
break;
case false:
console.log("i is zero");
break;
}
}