[size=x-large][b]switch语句:多分支语句[/b][/size]
[size=large][b]1.switch语句[/b][/size]是用来选择要执行的多个代码块之一(类似if...else if...[u]else if... [/u](n个)...else),见6举例
[size=large][b]2.语法:[/b] [/size]
switch(表达式n)
{
case 值1:语句体1;break;
case 值2:语句体2;break;
case 值3:语句体3;break;
...
default:语句体n;
}
[size=large][b]3.说明:[/b] [/size]
[list]
[*]switch、case必不可少
[*]break、default为可选项
[/list][size=large][b]4.表达式n:[/b] [/size]
[*]通常为一个变量(建议为number或者string类型)
[*]表达式类型应该与case后面的值的类型相同,因为在匹配比较时,switch使用的是“===”(全等于)判断类型,例子如下:
<script>
// 比较a、b都输入数字1后的结果
var a=prompt("key the number of 1 or 2");//a为string型
var b=prompt("key the number of 1 or 2")*1;//“*1”后输入的数b转变为number类型
switch(a)
{
case 1:x="长城";break;
//case后的值是个数值number类型,而a为string型
//达不到全等于“===”条件,所以不匹配长城,而选择了跳转到default后面的语句
case 2:x="故宫";break;
default:x="颐和园";
}
console.debug("x:"+x)//控制台结果:x:颐和园
switch(b)
{
case 1:y="长城";break;
// 因b已转化为number类型,与case 1 匹配,执行了“长城”这条语句体
case 2:y="故宫";break;
default:y="颐和园";
}
console.debug("y:"+y)//控制台结果:y:长城
</script>
控制台输出结果:
[img]http://dl2.iteye.com/upload/attachment/0117/7298/0bc6b01f-f14c-3ffe-a53b-3e3eca6fc3f6.png[/img]
[size=large][b]5.执行过程:[/b] [/size]
[list]
[*]计算表达式n结果,将表达式的值依次与case后面的值做比较,如果匹配,则执行该case后面的语句体;如果该语句体后面有break则执行完该语句体后跳出switch,如无break则无需判断直接进入下一个case分支或default语句,见下面举例
[*]如果所有case后面的值都与表达式n值不匹配,则执行default后面的语句体,如果没有default,则该switch语句什么都没做就结束
[/list][size=large][b]6.举例[/b][/size]
<script type="text/javascript">
//输入一个月份,输出该月份有多少天,不考虑闰年
// 使用if
var month=prompt("请输入一个月份")*1;
if (month==1 || month==3 || month==5 || month==7
|| month==8 || month==10 || month==12){
console.debug("if 语句:"+month+"月有31天。");
}
else if (month==4 || month==6 || month==9 || month==11){
console.debug("if 语句:"+month+"月有30天。");
}
else if (month==2){
console.debug("if 语句:"+month+"月有28天。");
}
else{
console.debug("你输入的月份不正确!");
}
// 使用switch
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
console.debug("switch 语句:"+month+"月有31天。");
break;
// 根据具体题目,利用break,简化书写
// 当输入的月份与1符合时,因没有break,仍会跳到后面的case再与后面的值比较,直到12月份输出12月份后面的结果,再通过break跳出switch
// 当所有出现31天的情况都走过仍没有时进入下面case 2的比较
case 2:
console.debug("switch 语句:"+month+"月有28天。");
break;
case 4:
case 6:
case 9:
case 11:
console.debug("switch 语句:"+month+"月有30天。");
break;
default:
console.debug("你输入的月份不正确!");
}
</script>
输入4之后,控制输出结果:
[img]http://dl2.iteye.com/upload/attachment/0117/7300/214999df-f5d9-3571-ac5c-ce07b6df76d7.png[/img]