关于JavaScript语句后面的分号问题(2)

  • -- ++ IdentifierName ] ) } RegularExpressionLiteral
  • 因为很少有语句以+或者-开头,所以这种情况不算危险。
  • 第四种是上一行以break、continue结尾的情况,下一行以Identifier开头时,会产生语法歧义。
  • 第五种是下一行以(和[开头的情况,上一行以以下结尾是,会产生语法歧义:
  • -- ++ IdentifierName ] ) } RegularExpressionLiteral StringLiteral NumericLiteral BooleanLiteral NullLiteral Identifier this 
  • 这种情况非常危险(所以hax的文章中要提出这种情况应该语句前写分号),几乎上一行的所有情况都将导致正常期望之外的结果。
  • 第六种是,当下一行以RegularExpressionLiteral 开头的情况,上一行的以下结尾,会导致/被理解为除号:
  • -- ++ IdentifierName ] ) }  RegularExpressionLiteral StringLiteral NumericLiteral BooleanLiteral NullLiteral Identifier this
  • 总结,

    1. 在return、break、continue、后自增、后自减五种语句中,换行符可以完全替代分号的作用。
    2. var if do while for continue break return with switch throw try debugger几种关键字开头的语句,以及空语句,上一行加不加分号影响不大。
    3. 凡表达式语句和函数表达式语句,后面不加分号非常危险,情况极其复杂。
    4. 凡(和[开头的语句,前面不加分号极度危险。

    下面在通过实例代码介绍下JavaScript中的分号问题

    一般在比较懒的前台程序员中经常会碰到一些莫名其妙的问题。

    今天仅讨论一下在JS中经常会碰到一些关于分号的问题。JavaScript这门语言是可以省略分号的,是因为它会换行符后如果缺少分号就会无法编译时它会默认添加上分号,但是在一些特定情况下他是不会默认添加分号的。现在简单介绍一下需要注意的几个地方。

    在这种情况时:

    var x = 0
    [x+1,x+2,x+3].forEach(function(){
    console.log(x)
    })

    这种情况下会导致程序无法正常运行。JavaScript在解析这段代码是并不会在var x = 0后换行。
    在写代码时如果以一条语句以 ”(”  ,"[" ,"+" ,"-"  ,"/"  开始时通常在上一条语句不会默认添加分号的。所以在这种情况下尽量保持一下这种写法,在以这些字符开始时在行首添加一个分号,这样可以保证在别人更改上面代码时不加分号也不会影响以下代码运行。

    var x = 0
    ;[x+1,x+2,x+3].forEach(function(){
    console.log(x)
    }) 

    还有就是在涉及 return   break   continue  这种语句时尽量不要换行

    return 
    true;
    JavaScript会解析为
    return; true;
    在涉及  ++  和  --  这一系列运算时 在作为表达式的前缀或后缀时在换行是会有一定的问题,如下情况:
    var x = 0;
    var y = 0;
    x
    ++
    y
          

    内容版权声明:除非注明,否则皆为本站原创文章。

    转载注明出处:http://www.heiqu.com/983.html