
一、switch语句
ECMAScript中switch语句的语法与其他基于C的语言非常接近,语法如下:
switch(expression){ case value: statement; break; case value: statement; break; case value: statement; break; default: statemen; }
switch语句中的每一种情形(case)的含义是:如果表达式等于这个值(value),则执行后面的语句(statement)。而break关键字会导致代码执行流跳出switch语句。如果省略break关键字,就会导致执行完当前case后,继续执行下一个case。最后的default关键字则用于在表达式不匹配前面任何一种情形的时候,执行机动代码(相当于一个else语句)。
二、switch语句和if语句是等价的
在某种程度上,switch语句和if语句是等价的。如下所示:
//if语句 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合并
通过为每个case后面都添加一个break语句,就可以避免同时执行多个case代码的情况。如果确实需要混合几种情形,可以省略break,但最好添加注释。
switch(i){ case 25: //合并两种情形 case 35: alert("25 or 35"); break; case 45: alert("45"); break; default: alert("Other"); }
四、ECMAScript中的switch语句的特征
ECMAScript中的switch语句借鉴自其他语言,但这个语句也有自己的特色:
- 可以在switch语句中使用任何数据类型(在很多其他语言中只能使用数值),无论是字符串,还是对象都没有问题。
- 每个case的值不一定是常量,可以是变量,甚至是表达式。
- switch语句在比较值时使用的是全等操作符,因此不会发生类型转换(例如,字符串“10”不等于数值10)。
//字符串比较 switch("hello world"){ case "hello" + "world": alert("Greeting was found"); break; case "goodbye": alert("Closing was found"); break; default: alert("Unexpected message was found."); } //布尔值比较 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."); }