一直说想要研究底层原理,把知识学深一些,原来真的像初中的物理老师说的那样,把基础的原理都学会,就能做难的题目,高难度题目的框架都是靠简单的原理搭建的。
if语句
var num = 5;
if(num>7){
document.write('数字大于7')
}else if(num>6){
document.write('数字大于6')
}else if(num>5){
document.write('数字大于5')
}else if(num>4){
document.write('数字大于4')
}else{
document.write('前面的条件都不满足')
}
switch语句
var num = 1;
switch(num){
case 4 :
document.write('数字是4');
break;
case 5 :
document.write('数字是5');
break;
case 6 :
document.write('数字是6');
break;
case 7:
document.write('数字是7');
break;
default :
alert('前面的条件不满足')
break;
}
从上面的例子可以看出
1、当分支较多时,当时用switch的效率是很高的。因为switch是随机访问的,就是确定了选择值之后直接跳转到那个特定的分支,但是if。。else是遍历所以得可能值,知道找到符合条件的分支,如此看来switch的效率确实比ifelse要高的多。
2、switch…case只能处理case为常量(是不可以改变的值)的情况,对非常量的情况是无能为力的。例如 if (a > 1 && a < 100),是无法使用switch…case来处理的。所以,switch只能是在常量选择分支时比ifelse效率高,但是ifelse能应用于更多的场合,ifelse比较灵活。
if和switch的区别
if语句:表达式的结果是boolean布尔类型(常用于区间判断)
switch语句:表达式类型不能是boolean布尔类型,可能是byte,int,char,string,枚举(常用于等值判断)
语句的选择
能用switch语句实现的就一定可以使用if来实现,但是反之不一定,如果是区间范围就采用if,如果是等值判断请使用switch
1.switch case与if else的效率问题
1.1 .switch case与if else的区别:switch case会生成一个跳转表来指示实际的case分支的地址,而if…else却需要遍历条件分支直到命中条件,
1.2. switch case的优缺点
(1)switch case的优点:
当分支较多时,用switch的效率是很高的。因为switch是确定了选择值之后直接跳转到那个特定的分支.
(2)witch case的缺点:
1.switch…case占用较多的代码空间,因为它要生成跳表,特别是当case常量分布范围很大但实际有效值又比较少的情况,switch…case的空间利用率将变得很低。
2.switch…case只能处理case为常量的情况。
1.3. if else的优缺点
(1)if else的优点:if else能应用于更多的场所以if else比较灵活。
(2)if else的缺点:if else必须遍历所以得可能值。
总结:
在选择分支较多时,选用switch…case结构会提高程序的效率,但switch不足的地方在于只能处理字符或者数字类型的变量,if…else结构更加灵活一些,if…else结构可以用于判断表达式是否成立,比如if(a+b>c),if…else的应用范围更广,switch…case结构在某些情况下可以替代if…else结构。
3.switch不加break为什么具有直通性?
用break的作用就是跳出switch,不执行其他的case,如果不加就一直走下去,一直等到下一个break后跳出,如果一直没有break,就要等到switch结束后退出。