JavaScript语言中那些显而易见的危险或无用的特性不是最糟糕的,这些特性很容易被避免。最糟糕的特性像“带刺的玫瑰”,它们是有用的,但也是危险的。
switch语句的由来可以追溯到FORTRAN IV的go to语句。除非明确地中断流程,否则每次条件判断后都贯穿到下一个case条件。switch语句的基本语法格式如下:
switch(expression){
statements
}
完全扩展后的switch结构如下:
switch(expression){
case label:
statementList
case label:
statementList
...
default:
statementList
}
当执行switch语句时,JavaScript解释器首先计算expression表达式的值,然后使用这个值与每个case从句中label标签值进行比较,如果相同则执行该标签下的语句。在执行时如果遇到跳转语句,则会跳出switch结构,否则按顺序向下执行,直到switch语句末尾。如果没有匹配的标签,则会执行default从句中的语句。如果没有default从句,则跳出switch结构,执行其后的句子。从ECMAScript v3版本开始允许case从句中可以是任意的表达式,这在C/C++和Java语言中是不允许的。switch语句的示例如下:
switch(a=3){
case 3-2:
alert(1);
break;
case 1+1:
alert(2);
break;
case b=3:
alert(3);
}
在switch语句中,case从句只是指明了想要执行代码的起点,并没有指明终点,如果没有向case从句中添加break语句,则会发生连续贯穿现象,从而忽略后面case从句,这样就会造成switch结构的逻辑混乱。不过,如果是在函数中使用switch语句,还可以使用return语句来代替break语句,这两个语句都可以终止switch语句,防止case从句之间发生逻辑贯穿。