switch语句与if语句的关系最为密切,switch语句的语法如下:
switch(expression){
case value:statement
break;
case value:statement
break;
case value:statement
break;
case value:statement
break;
default:statement
}
switch语句中的每一种情形(case)的含义是:“如果表达式等于这个值(value),则则执行后面的语句(statement)”。而break关键字会导致代码执行流跳出switch语句。如果省略break关键字,就会导致执行完case后,继续执行下一个case,最后的default关键字则用于在表达式不匹配前面任何一种情形的时候,执行机动代码(相当于一个else语句)。
从根本上讲,switch语句就是为了让开发人员免于编写像下面这样的代码:
if(i==25){
alert("25");
}else if(i==35){
alert("35");
}else if(i==45){
alert("45")
}else{
alert("other");
}
而与此等价的switch语句如下所示:
switch(i){
case 25:
alert("25");
break;
case 35:
alert("35");
break;
case 45:
alert("45");
break;
default:
alert("other");
}
通过为每个case后面都要添加一个break语句,就可以避免同时执行多个case代码的情况。假如确实要混合几种情况,不要忘记在代码中添加注释,说明你是有意省略了break关键字,如下所示:
switch(i){
case 25:
//合并两种情形
case 35:
alert("25 or 35");
break;
case 45:
alert("45");
break;
default:
alert("other");
}
switch语句的特色在于,在switch语句中可以使用任何数据类型,无论是字符串还是对象都没有问题。其次每个case值不一定是常量,可以是变量,甚至是表达式。举个栗子:
switch("hello world"){
case "hello"+"world";
alert("Greeting was found");
break;
case "goodbye";
alert("Closing was found");
break;
default:
alert("Unexpected message was found");
}
在这个例子中,switch语句使用的就是字符串,第一个情况就是由于字符串拼接表达式的结果与switch的参数相等,因此结果就会显示“Greeting was found”。而且使用表达式作为case值还能实现以下操作:
var num=25;
switch(true){
case num<0;
alert("Less than 0");
break;
case num>=0&&num<=10;
alert("Between 0 and 10");
break;
case num>10&&num<=20;
alert("Between 10 and 20");
break;
default :
alert("more than 20");
}
这个例子中,首先在switch语句外面声明了变量num,而之所以给switch语句传递表达式true,是因为每个case值都可以返回一个布尔值。这样每个case按照顺序被求值,直至找到匹配的值,或者遇到default语句为止。
(switch语句在比较值时使用的是全等操作符,因此不会发生类型转换,例如:字符串“10”不等于数字10)。