JS编程建议——16:防止switch贯穿

建议16:防止switch贯穿
JavaScript语言中那些显而易见的危险或无用的特性不是最糟糕的,这些特性很容易被避免。最糟糕的特性像“带刺的玫瑰”,它们是有用的,但也是危险的。
switch语句的由来可以追溯到FORTRAN IV的go to语句。除非明确地中断流程,否则每次条件判断后都贯穿到下一个case条件。switch语句的基本语法格式如下:

  1. switch (expression ){
  2. statements
  3. }
    完全扩展后的switch结构如下:
  4. switch ( expression ){
  5. case label:
  6. statementList
  7. case label:
  8. statementList
  9. ...
  10. default:
  11. statementList
  12. }
    当执行switch语句时,JavaScript解释器首先计算expression表达式的值,然后使用这个值与每个case从句中label标签值进行比较,如果相同则执行该标签下的语句。在执行时如果遇到跳转语句,则会跳出switch结构,否则按顺序向下执行,直到switch语句末尾。如果没有匹配的标签,则会执行default从句中的语句。如果没有default从句,则跳出switch结构,执行其后的句子。从ECMAScript v3版本开始允许case从句中可以是任意的表达式,这在C/C++和Java语言中是不允许的。switch语句的示例如下:
  13. switch (a = 3){
  14. case 3-2:
  15. alert(1);
  16. break;
  17. case 1+1:
  18. alert(2);
  19. break;
  20. case b=3:
  21. alert(3);
  22. }
    在switch语句中,case从句只是指明了想要执行代码的起点,并没有指明终点,如果没有向case从句中添加break语句,则会发生连续贯穿现象,从而忽略后面case从句,这样就会造成switch结构的逻辑混乱。不过,如果是在函数中使用switch语句,还可以使用return语句来代替break语句,这两个语句都可以终止switch语句,防止case从句之间发生逻辑贯穿。
时间: 2024-08-30 17:54:11

JS编程建议——16:防止switch贯穿的相关文章

JS编程建议——25:恰当选用if和switch

建议25:恰当选用if和switchswitch结构中存在很多限制,存在这些限制的主要目的是提高多重分支结构的执行效率.因此,如果能够使用switch结构,就不要选择if结构.无论是使用if结构,还是使用switch结构,应该确保下面3个目标的基本实现:准确表现事物内在的.固有的逻辑关系.不能为了结构而破坏事物的逻辑关系.优化逻辑的执行效率.执行效率是程序设计的重要目标,不能为了省事而随意耗费资源.简化代码的结构层次,使代码更方便阅读.相对来说,下面几种情况更适合使用switch结构:枚举表达式

JS编程建议——2:正确辨析JavaScript句法中的词、句和段

建议2:正确辨析JavaScript句法中的词.句和段JavaScript语法包含了合法的JavaScript代码的所有规则和特征,它主要分为词法和句法.词法包括字符编码.名词规则.特殊词规则等.词法侧重语言的底层实现(如语言编码问题等),以及基本规则的定义(如标识符.关键字.注释等).它们都不是最小的语义单位,却是构成语义单位的组成要素.例如,规范字符编码集合.命名规则.标识符.关键字.注释规则.特殊字符用法等.句法定义了语言的逻辑和结构,包括词.句和段的语法特性,其中段体现逻辑的结构,句表达

JS编程建议——1:警惕Unicode乱码

建议1:警惕Unicode乱码ECMA标准规定JavaScript语言基于Unicode标准进行开发,JavaScript内核完全采用UCS字符集进行编写,因此在JavaScript代码中每个字符都使用两个字节来表示,这意味着可以使用中文来命名变量或函数名.虽然ECMAScript v3标准允许Unicode字符出现在JavaScript程序的任何地方,但是在v1和v2中,ECMA标准只允许Unicode字符出现在注释或引号包含的字符串直接量中,在其他地方必须使用ASCII字符集,在ECMASc

JS编程建议——3:减少全局变量污染

建议3:减少全局变量污染定义全局变量有3种方式:在任何函数外面直接执行var语句. var f = 'value'; 直接添加一个属性到全局对象上.全局对象是所有全局变量的容器.在Web浏览器中,全局对象名为window. window.f = 'value'; 直接使用未经声明的变量,以这种方式定义的全局变量被称为隐式的全局变量. f = 'value'; 为方便初学者在使用前无须声明变量而有意设计了隐式的全局变量,然而不幸的是忘记声明变量成了一个非常普遍的现象.JavaScript的策略是让

JS编程建议——8:谨慎使用运算符(1)

建议8:谨慎使用运算符(1)1.用===,而不用==JavaScript有两组相等运算符:===和!==.==和!=.===和!==这一组运算符会按照期望的方式工作.如果两个运算数类型一致且拥有相同的值,那么===返回true,而!==返回false.==和!=只有在两个运算数类型一致时才会做出正确的判断,如果两个运算数是不同的类型,会试图强制转换运算数的类型.转换的规则复杂且难以记忆,具体规则如下: '' == '0' // false 0 == '' // true 0 == '0' //

JS编程建议——21:推荐提高循环性能的策略(1)

建议21:推荐提高循环性能的策略(1)每次运行循环体时都会产生性能开销,增加总的运行时间,即使是循环体中最快的代码,累计迭代上千次,也将带来不小的负担.因此,减少循环的迭代次数可获得显著的性能提升.例如: var iterations = Math.floor(items.length / 8), startAt = items.length % 8, i = 0; do { switch(startAt) { case 0: process(items[i++]); case 7: proce

JS编程建议——24:优化if逻辑(2)

建议24:优化if逻辑(2)重写if结构后,每次抵达正确分支时最多通过4个条件判断.新的if结构使用二分搜索法将值域分成了一系列区间,然后逐步缩小范围.当数值范围分布在0-10 时,此代码的平均运行时间大约是前面代码的一半.此方法适用于需要测试大量数值的情况,而相对离散值来说switch 更合适.当然,在性能影响不是很大的情况下,遵循条件检测的自然顺序会更容易阅读.例如,对于检测周一到周五值日任务安排的分支结构来说,虽然周五的任务比较重要,但是这类任务有着明显的顺序,安排顺序结构还是遵循它的自然

JS编程建议——23推荐提高条件性能的策略

建议23:推荐提高条件性能的策略与循环相似,条件表达式决定JavaScript 运行流的走向.与其他语言一样,JavaScript也采用了if 和switch 两种条件结构.由于不同浏览器针对流程控制进行了不同的优化,因此两者在性能上并没有特别大的差异,主要还是根据需求形式进行分析和选择:条件数量较大,建议选择switch 结构,而不是if结构,这样可以使代码更易读:如果条件较少时,建议选择if结构. //条件少 if(found) { //执行代码 } else { //执行代码 } //条件

JS编程建议——29:准确使用循环体(1)

建议29:准确使用循环体(1)1.选择正确的循环体在大多数编程语言中,代码执行时间多数消耗在循环的执行上.在一系列编程模式中,循环是最常用的模式之一,因此也是提高性能必须关注的地方之一.理解JavaScript 中循环对性能的影响至关重要,因为死循环或长时间运行的循环会严重影响用户体验.JavaScript定义了4种类型的循环:第一种循环是标准的for循环,与C语言使用同样的语法: for (var i=0; i < 10; i++){ //循环体 } for循环是最常用的循环结构,它由4部分组