js中if 和 switch 判断语句的区别

1,416 阅读2分钟

例子

if语句

var mon = +(window.prompt("请输入1~12的某一个月份"));
if(!(mon>=1 && mon<=12)){
	alert("没有")
}else{
	if(mon==3 || mon==4 || mon==5){
		alert("春季");
	}else if(mon==5 || mon==7 || mon==8){
		alert("夏季");
	}else if(mon==9 || mon==10 || mon==11){
		alert("秋季");
	}else if(mon==12 || mon==1 || mon==2){
		alert("冬季");
	}
}

switch语句

var mon = +(window.prompt("请输入1~12的某一个月份"));
switch(mon){
	case 12:
	case 1:
	case 2:
	console.log("冬季");
	break;
	case 3:
	case 4:
	case 5:
	console.log("春季");
	break;
	case 6:
	case 7:
	case 8:
	console.log("夏季");
	break;
	case 9:
	case 10:
	case 11:
	console.log("秋季");
	break;
	default:
        console.log("没有");
	break;
}

从上面的例子可以看出

1、分支比较多且无法穷尽时最好用 if, 其它情况可以按照个人习惯
2、如果数据量不是很大, 并且数据是固定的可以用Switch
3、理论上Switch的效率比if高

if和switch的区别

if语句:表达式的结果是boolean布尔类型(常用于区间判断)

switch语句:表达式类型不能是boolean布尔类型,枚举(常用于等值判断)

语句的选择

能用 switch语句实现的就一定可以使用 if来实现但是反之不一定如果是区间范围就采用 if,如果是等值判断请使用 switch

switch case与if else的效率问题

1.switch case与if else的区别:switch case会生成一个跳转表来指示实际的case分支的地址,而if…else却需要遍历条件分支直到命中条件,

switch case的优缺点

(1)switch case的优点:
当分支较多时,用switch的效率是很高的。因为switch是确定了选择值之后直接跳转到那个特定的分支.
(2)switch case的缺点:
switch…case占用较多的代码空间,因为它要生成跳表,特别是当case常量分布范围很大但实际有效值又比较少的情况,switch…case的空间利用率将变得很低。

if else的优缺点

(1)if else的优点:if else能应用于更多的场所以if else比较灵活。
(2)if else的缺点:if else必须遍历所以得可能值。

总结:

在选择分支较多时选用 switchcase结构会提高程序的效率但 switch不足的地方在于只能处理字符或者数字类型的变量ifelse结构更加灵活一些ifelse结构可以用于判断表达式是否成立比如 if(a+b>c),ifelse的应用范围更广switchcase结构在某些情况下可以替代 ifelse结构

switch不加break为什么具有直通性?

用break的作用就是跳出switch,不执行其他的case,如果不加就一直走下去,一直等到下一个break后跳出,如果一直没有break,就要等到switch结束后退出。