首页 » 编写高质量代码:改善JavaScript程序的188个建议 » 编写高质量代码:改善JavaScript程序的188个建议全文在线阅读

《编写高质量代码:改善JavaScript程序的188个建议》建议16:防止switch贯穿

关灯直达底部

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从句之间发生逻辑贯穿。