if else 和 switch 的选择
switch 一般用于单一条件的判断
if 一般用于连续区间值判断,复杂的多条件判断,或者动态表达式判断
if 和 switch 都可以设计多重分支结构,一般情况下 switch 执行效率要高于 if 语句,代码可读性也高,如果能够使用switch结构,就不要选择if结构。
无论是使用if还是使用switch结构,应该遵循一下原则:
- 准确表现事物内在的、固有的逻辑关系。不能为了结构而破坏事物的逻辑关系。
- 优化逻辑的执行效率。执行效率是程序设计的重要目标,不能为了省事而随意耗费资源。
- 简化代码的结构层次,使代码更方便阅读。
switch用法
离散形判断
switch (sex) {
case 1 :
console.log("女士");
break;
case 2 :
console.log("男士");
break;
default :
console.log("请选择性别");
}
if-else 适用于判断两个离散的值或者判断几个不同的值域
如果判断多于两个离散值,switch是更理想的选择。
没有break会继续执行
switch(num){
case 1:
case 2:
//相當於if(num==1 || num==2)
console.log("show 1 or 2!!");
break;
case 3:
case 4:
//相當於if(num==3 || num==4)
console.log("show 3 or 4!!");
break;
default:
//相當於else
console.log("show others!!")
}
if 和 switch 的转换
线性区间值判断一般用if
if (score < 60) {
console.log("不及格");}
else if (score < 75) {
console.log("合格");
}else if (score <85) {
console.log("良好");
}else {
console.log("优秀");
}
switch也可以, 匹配表达式写成true:
switch (true) {
case score < 60:
console.log("不及格");
break;
case score < 75 :
console.log("合格");
break;
case score <85 :
console.log("良好");
break;
default :
console.log("优秀");
}
条件判断优化
- 提前return
if(condition){
//doSomething
}else{
return ;
}
改为:
if(!condition){
return ;
}
//doSomething
- 三目运算
let a;
if(condition){
a = A
}else{
a = B
}
改为:
let a = condition ? A : B
- 多条件同时判断,将一层判断语句变成两层判断语句
if(a > 0 && b > 10) {
return A
} else if (a > 0 && b <= 10) {
return B
} else if (a < 0 && b > 10) {
return C
} else {
return D
}
改为:
if(a > 0) {
if (b > 10) {
return A
} else {
return B
}
} else {
if (b > 10) {
return C
} else {
return D
}
}
- 条件以最大概率出现到最小概率出现依次排列, 减少判断次数
- 判断条件较多并在一定区间内,可使用二分搜索法将值域分成了一系列区间,减少代码的平均运行时间
if (value == 0){
console.log('result0')
} else if (value == 1){
console.log('result1')
} else if (value == 2){
console.log('result2')
} else if (value == 3){
console.log('result3')
} else if (value == 4){
console.log('result4')
} else if (value == 5){
console.log('result5')
} else if (value == 6){
console.log('result6')
} else if (value == 7){
console.log('result7')
} else if (value == 8){
console.log('result8')
} else if (value == 9){
console.log('result9')
} else {
console.log('result10')
}
改成:
if(value < 6) {
if(value < 3){
if (value == 0){
console.log('result0')
} else if (value == 1){
console.log('result1')
} else (value == 2){
console.log('result2')
}
} else {
if (value == 3){
console.log('result3')
} else if (value == 4){
console.log(result4)
} else (value == 5){
console.log('result5')
}
}
} else {
if(value < 8) {
if (value == 6){
console.log('result6')
} else (value == 7){
console.log('result7')
}
} else {
if (value == 8){
console.log('result8')
} else if (value == 9){
console.log('result9')
} else (value == 10){
console.log('result10')
}
}
}