代码分支结构作为三大结构(顺序、分支、循环)之一其重要性自然是不言而喻的,下面我们根据小案例来学习一下if和switch分支结构:
if 判断
1.使用if条件判断验证用户输入的年份是否为闰年:
<script>
// 闰年算法:能被4整除且不能被100整除的为闰年(如2000年是闰年,1901年不是闰年则为平年)
// 或者能够被400整除的就是闰年
var year = prompt('请输入一个年份:')
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
alert(year + '是闰年!');
} else {
alert(year + '是平年!');
}
</script>
代码执行截图:
2.接收用户输入一个姓名通过if条件判断其是否是中奖姓名(“王麻子”为中奖姓名):
<script>
// 根据用户输入姓名判断是否中奖
var userName = prompt('请输入彩票购买人中文姓名:');
// .replace()函数为去掉userName两端的空格(中间的不能去掉)
userName = userName.replace(/(^[\s\n\t]+|[\s\n\t]+$)/g, "");
if (userName == '王麻子') {
alert('恭喜您!中奖了!\n您本次中奖金额为 50¥,请联系分站兑奖哦!');
} else {
alert('很遗憾!您此次并未中奖,欢迎您下次再购买中国福利彩票哦!');
}
</script>
执行代码截图:
只有正确输入姓名为“王麻子”才会弹出恭喜中奖窗口提示。
补充:两分支结构大多可以使用三目运算符来写:
<script>
// 加工一个数字,若数字小于10则在数字前面补0,若是大于10就原样返回
// 两分支的结构可以用三目运算符来写,这样更简单
var time = prompt('请您随意输入一个数字:');
var result = time < 10 ? '0' + time : time; // 做判断并把值给result
alert(result);
</script>
执行代码截图:
当然if语句除了两分支还能使用if else if写出更多的分支(理论上分支无上限),这里就不举例了。有需要可以访问链接:if else if
switch分支
案例:通过用户输入的数字(提示输入1~7)匹配不同的case语句提示周一到周五,若case没有匹配到则执行default语句提示周末:
<script>
// switch语句:用我们的表达式/值(year)与case中的值进行比较匹配,若匹配上就执行该case语句,该语句的范围是从case开始到break结束,正常在众多case语句中一次只需执行一个(多选一),而若year在所有的case中都没有匹配到则会执行最后的default语句。
var year = prompt('请输入一个1~7数字:');
// 因为用户输入可能会有多余的空格符所以保险起见先去掉变量两端的空格符
var year = year.replace(/(^[\s\n\t]+|[\s\n\t]+$)/g, "");
switch (year) {
case '1': //注意:prompt函数接收的值是string类型的,而这里的比较规则是===
alert('周一奋斗!');
break;
case '2':
alert('周二努力!');
break;
case '3':
alert('周三加油!');
break;
case '4':
alert('周四刻苦!');
break;
case '5':
alert('周五坚持');
break;
default:
alert('周末愉快!');
}
</script>
注意:
- 表达式/值(year)和case后面的值比较时是按照===全等于进行比较的,也就是说会比较值和类型需要完全相等才算匹配上
- break不是必须的,但是没有它程序运行case语句就不会自动跳出程序了,就会继续往下执行
小结:
- switch和if else if很像而且两者基本可以实现互换,但是一般每个分支的执行条件也就相当于是case的值能确定的情况下最好是使用switch结构,而多个分支且分支不能确定具体的值只有范围时使用if else if就更好了。这二者是各有优劣的。
- switch语句进行条件判断后直接执行符合条件的case语句块,其他case语句块不会被执行,分支较多时较之if else if语句效率更高些(但是如果分支非常少的情况下if else if的效率会更高)