switch结构中存在很多限制,存在这些限制的主要目的是提高多重分支结构的执行效率。因此,如果能够使用switch结构,就不要选择if结构。
无论是使用if结构,还是使用switch结构,应该确保下面3个目标的基本实现:
❑准确表现事物内在的、固有的逻辑关系。不能为了结构而破坏事物的逻辑关系。
❑优化逻辑的执行效率。执行效率是程序设计的重要目标,不能为了省事而随意耗费资源。
❑简化代码的结构层次,使代码更方便阅读。
相对来说,下面几种情况更适合使用switch结构:
❑枚举表达式的值。这种枚举是可以期望的、平行逻辑关系的。
❑表达式的值具有离散性,不具有线性的非连续的区间值。
❑表达式的值是固定的,不是动态变化的。
❑表达式的值是有限的,而不是无限的,一般情况下表达式应该比较少。
❑表达式的值一般为整数、字符串等类型的数据。
而if结构则更适合下面的一些情况:
❑具有复杂的逻辑关系。
❑表达式的值具有线性特征,如对连续的区间值进行判断。
❑表达式的值是动态的。
❑测试任意类型的数据。
例如,针对学生分数进行不同的判断,如果分数小于60,则评定为不及格;如果分数在60~75(不包含75)之间,则评定为合格;如果分数在75~85(不包含85)之间,则评定为良好;如果分数在85~100之间,则评定为优秀。针对这种情况,表达式的值是连续的线性判断,显然使用if结构会更合适一些。
if(score<60){
alert("不及格");
}
else if(60<=score<75){
alert("合格");
}
else if(75<=score<85){
alert("良好");
}
else if(85<=score<=100){
alert("优秀");
}
如果使用switch结构,则需要枚举100种可能,如果分数值还包括小数,情况就更加复杂了,此时使用switch结构就不是明智之举。但是,对于有限制的枚举数据,比如性别,使用switch结构会更高效,例如:
switch(sex){
case"女":
alert("女士");
break;
case"男":
alert("先生");
break;
default:
alert("请选择性别");
}