注意:经过我严格的测试发现他们两个效率基本上是完全一样的,执行数千万次相差的时间也不过是1、2毫秒,几乎是没有效率高低的。
单从理论上讲肯定是switch效率高,毕竟只计算一次值;然后就是比较跳转到
分支中去;而if else每个分支都要计算一下
switch效率高,从汇编代码可以看出来
switch只计算一次值 然后都是test,jmp, if...else 是每个条件都要计算一遍的.
不过这种高效率 没什么用 差别也不是很大 LZ应该从你的算法和机器上下手 才能真正提高 你程序的效率
但在实际的使用中,如果分支比较少;且特定条件下,也有可能if else if分支高;
比如= 0 =1和>1三个分支,如果通常应用都在>1这个分支里,也就是switch中的
default分支,那如下的效率可能更高
if(>1)
...
else if(=0)
....
else
....
你可以做个实验试一下,另外我觉得主要看应用场景,纯考虑效率没什么必要
<script> var t,s0,s1; t=new Date(); s0=t.getTime(); document.write("Time:<br />"); var a=null; var x; var count=400000; for(var i=0;i<count;i++){ switch(a){ case true: x=1; break; case false: x=1; break; default: x=1; } } t=new Date(); s1=t.getTime(); document.write("switch: "+(s1-s0)+" ms"); document.write("<br />"); for(var i=0;i<count;i++){ if(a==true){ x=1; } else if(a==false){ x=1; } else{ x=1; } } s0=s1; t=new Date(); s1=t.getTime(); document.write("ifelse: "+(s1-s0)+" ms"); document.write("<br />"); </script> 几组结果: Time: switch: 862 ms ifelse: 941 ms Time: switch: 851 ms ifelse: 952 ms Time: switch: 851 ms ifelse: 941 ms
评论