if else 和 switch 的区别和选择

if else 和 switch 的选择

switch 一般用于单一条件的判断
if 一般用于连续区间值判断,复杂的多条件判断,或者动态表达式判断
if 和 switch 都可以设计多重分支结构,一般情况下 switch 执行效率要高于 if 语句,代码可读性也高,如果能够使用switch结构,就不要选择if结构。
无论是使用if还是使用switch结构,应该遵循一下原则:

  1. 准确表现事物内在的、固有的逻辑关系。不能为了结构而破坏事物的逻辑关系。
  2. 优化逻辑的执行效率。执行效率是程序设计的重要目标,不能为了省事而随意耗费资源。
  3. 简化代码的结构层次,使代码更方便阅读。

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("优秀");
}

条件判断优化

  1. 提前return
if(condition){
    //doSomething
}else{
    return ;
}

改为:

if!condition){
    return ;
}
//doSomething
  1. 三目运算
let a;
if(condition){
    a = A
}else{
	a = B
}

改为:

let a = condition ? A : B
  1. 多条件同时判断,将一层判断语句变成两层判断语句
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
	}
}
  1. 条件以最大概率出现到最小概率出现依次排列, 减少判断次数
  2. 判断条件较多并在一定区间内,可使用二分搜索法将值域分成了一系列区间,减少代码的平均运行时间
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')
        }
    }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百事可爱-后悔下凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值