当判断语句存在 3 条或 3 条以上的分支语句时,也经常使用 switch 语句。if…else if…else 语句很多时候都可以使用 switch 语句代替,而且当所有判断都针对一个表达式进行时,使用 switch…case 语句比 if…else if…else 语句更合适,因为此时只需要计算一次条件表达式的值。
switch 语句的基本语法如下:
switch 后面的“表达式”可以是任意的具有某个值的表达式。case 关键字后面的值也可以是任意的表达式,实际中最常用的是某个类型的直接量。
switch 语句的执行流程是这样的:首先计算 switch 关键字后面的表达式,然后按照从上到下的顺序计算每个 case 后的表达式并和 switch 表达式的值进行比较。
当 switch 表达式的值与某个 case 表达式的值相等时,就执行此 case 后的语句块;如果 switch 表达式的值与所有 case 表达式的值都不相等,则执行语句中的“default:”的语句块;如果没有“default:”标签,则跳过整个 switch 语句。
另外,break 语句用于结束 switch 语句,从而使 JavaScript 只执行匹配的分支。如果没有 break 语句,则该 switch 语句的所有分支都将被执行,switch 语句也就失去了使用的意义。
需要注意的是:对每个 case 的匹配操作是 “===”严格相等运算符比较操作,即两个表达式的值必须同时满足值和类型都相等才算相等。
下面使用 switch 语句修改“JS if else语句”一节中的例 5,代码如下所示。
【例 1】switch 语句的使用。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>switch语句的使用</title>
<script>
window.onload = function (){
var oText = document.getElementById('text1');
var oBtn = document.getElementById('btn1');
oBtn.onclick = function (){
var score = oText.value; //获取文本框中输入的成绩
switch(Math.floor(score/10)){ //除法操作使score字符串隐式转换为数字
case 6:
alert("成绩及格!");
break;
case 7:
alert("成绩中等!");
break;
case 8:
alert("成绩良好!");
break;
case 9:
case 10:
alert("成绩优秀!");
break;
default:
alert("成绩不理想!");
}
};
};
</script>
</head>
<body>
<body>
请输入成绩:<input type="text" id="text1"/>
<input type="button" id="btn1" value="提交"/>
</body>
</html>
上述代码中的 floor(value) 方法是 Math 内置对象的一个方法,功能是返回一个小于等于参数 value 的最小整数,例如 Math.floor(89/10)=Math.floor(8.9)=8。可见如果成绩是分布在 1~100,则使用 floor(score/10) 方法可以得到每一段成绩对应的数字分别为 1~10,再通过判断 floor(score/10) 值为哪个数字就可以知道成绩的等级了。
上述代码首先计算 switch 中的表达式 Math.floor(score/10),然后将该值按从上到下的顺序依次跟 case 后面的值比较,如果相等,则执行该 case 后面的代码并退出 switch 语句;如果跟所有的 case 后面的值比较都不相等,则执行“default:”后面的语句块。需要注意的是,case9 后面没有 break 语句,这样当 switch 表达式的值是 9 时,程序会执行完 case9 后继续执行 case10,然后跳出。
需要注意的是:例 1 只针对输入的值在 0~100 之间有效,如果超出 100,则判断结果出错。对 0~100 之间的输入值,运行结果如下图所示。