switchcase和ifelse⽐较
switch case和if else常常被拿来⽐较,那是因为他们两个都可以实现同样的功能。这时候我们就会想什么时候⽤哪个更好呢?
可以从下⾯⼏个⽅⾯来做⼀下⽐较:
1.灵活性
⾸先看下⾯⼀个简单的例⼦:
//在a和b都是正数的情况下判断a+b是否⼤于c
var a =1,
b =2,
c =2;
//⽅式1
if(a >0&& b >0){
if(a + b > c){
console.log("a+b⼤于c");
}else{
console.log("a+b不⼤于c");
}
}else{
console.log("a和b不都是正数");
}
//⽅式2
switch(a >0&& b >0){
case true:
switch(a + b > c){
case true:
console.log("a+b⼤于c");
break;
case false:
console.log("a+b不⼤于c");
break;
}
break;
case false:
console.log("a和b不都是正数");
switch语句必须使用break吗break;
}
从上⾯这么⼀个简单的例⼦可以看出来,switch case和if else虽然都可以实现同样的功能,但是对于逻辑判断表达式来说if else更加灵活,switch需要⽤更多的分⽀来实现和if else⼀样的效果,在逻辑判断表达式更复杂的时候表现的越明显。⽽对于switch case来说常量的匹配会更加有优势,特别注意switch case的关联操作在⼀些情况下也⾮常有⽤,例⼦可以参考。
除此之外还有2点需要注意:
① 在许多语⾔中,switch的参数只能⽀持某些数据类型。⽽if⼏乎可以⽀持所有的数据类型。
② if语句没有else不会影响后续代码的执⾏,但是switch语句必须注意break的⽤法,具体可以参考。
2.效率
借⽤2个图来说明下两个语句的执⾏过程:
图1: if else执⾏流程图
图2: switch case执⾏流程图
从上⾯两个图可以明显的看出来,对于if else来说要遍历每⼀个条件直到到符合条件的case,对于不同case其实执⾏时间是不⼀样的。进⼊第⼀个case需要判断1次,符合第⼆个case需要判断2次,以此类推……
switch case本质是通过在汇编的时候⽣成跳转表来指⽰case的地址,通常编译器都会对跳转表进⾏优化,所以它所有case都可以通过少量判断就跳转到对应符合条件的case,对于每⼀个case的执⾏时间基本是相同的。
没有经过特定条件的巨⼤量的测试,没法给出具体有⼏个分⽀的时候选择哪⼀种⽅式速度更快,但是以下⼏点值得我们注意:
① 在分⽀⽐较多的情况下优先考虑switch case,不仅考虑到效率,也应该综合代码可读性,可维护性等。
② 选择使⽤哪个表达式之前应该评估每个条件出现的可能性,如果if else的前⾯两三个条件就可以覆盖到绝⼤部分情况,其实if else的效率并不会⽐switch case低。
③ 这两种表达式的不同在效率上对整体代码的执⾏时间影响很⼩,应该把代码的可读性,可维护性等考虑因素放在效率之前。
3.可读性和可维护性
参考阐述灵活性中的举例,当判断条件为逻辑表达式且条件较少的时候,使⽤if else看起来⽐switch case简洁⽽且维护起来也更容易。但是当条件数超过三个且都是常量的时候,看下⾯这个简单的例⼦:
//⽅式1
switch(color){
case"red":
console.log("red");
break;
case"yellow":
console.log("yellow");
case"blue":
console.log("blue");
default:
console.log("unknown color");
}
//⽅式2
if(color ==="red"){
console.log("red");
}else if(color ==="yellow"){
console.log("yellow");
}else if(color ="blue"){
console.log("blue");
}else{
console.log("unknown color");
}
⽤switch case看起来就⾮常清晰,⽽且即使你再加⼏个条件看起来代码也不会显得冗余,维护性和可读性都⽐if else更好。
综上,选择什么时候使⽤switch case或if else不能只看⼀种因素,需要综合考虑到各个⽅⾯。
关联操作
1.
2.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论