JavaScript不带分号的代码风格和缩小?

WHI*_*LOR 20 javascript node.js

我试图决定是否值得采用JavaScript无分号风格.

如果我有没有分号的JavaScript代码:

function(){
    var first = 1
    var second = 2
    sum = 1 + 2
    return sum
}
Run Code Online (Sandbox Code Playgroud)

它将在浏览器和Node.js中工作.

但是缩小(通过Uglify或Closure Compiler)代码在浏览器和Node.js中工作?

我读过JavaScript中的Semicolons是可选的.它说它应该工作.

Rao*_*oul 25

我个人亲分号排序的家伙,但对于替代,这是经常不是一个令人信服的理由给予公平的声音.与所有编码风格的论点一样,这将是一场永无止境的辩论,没有合理的结论.做你和你的团队感觉更舒服的事情.

如果您确实采用节俭的分号方法,请确保您和您的团队正确理解自动分号插入(ASI)和语句终止规则.无论你的决定是什么,这都是一件好事.

关于缩小:如果你不想冒一个minifier bug的潜在头痛的风险以及报告和修复它(或等待修复)的相关负担,因为它没有正确地做ASI,那么就不要依赖ASI.


Bea*_*rtz 6

尽管JavaScript中的分号是可选的,但强烈建议不要使用分号:

  • 它使您的代码容易受到错误的攻击 删除空格(用于缩小): 试试这个:

    var a = 1; var b = 7; var sum = a + b(a + b)

它缩小到var a=1,b=7,sum=a+b(a+b);,这将导致错误number is not a function.还有其他案例这种情况.

更新:此错误不是由缩小造成的,但是,下一个是:

  • 它会使您的代码容易受到缩小错误的影响:尝试:

    var isTrue = true
    
    function doSomething() { return 'yeah' }
    
    function doSomethingElse() { return 'yes, dear' }
    
    doSomething()
    
    !isTrue && doSomethingElse()
    
    Run Code Online (Sandbox Code Playgroud)

    缩小为:

    var isTrue=true;function doSomething(){return "yeah"}function doSomethingElse(){return "yes, dear"}doSomething()!isTrue&&doSomethingElse();
    
    Run Code Online (Sandbox Code Playgroud)

    这导致:

    SyntaxError: Unexpected token !
    
    Run Code Online (Sandbox Code Playgroud)
  • 它使您的代码在方便性方面的可读性和可维护性降低:使用分号已被正确地建立为良好实践,并且训练有素的JavaScript开发人员会对试图逃避约定的代码感到困惑.

另一件事是,你必须问自己:你真正得到的是什么,省略了分号?

  • 清洁代码?如果您希望JavaScript看起来不像JavaScript,请尝试使用Coffee Script.但是有一些被误导的概念,它认为像上面提到的那样的陷阱被"简单的解决方案清除:当一条线以括号开头时,在它前面加一个分号.".这个干净的代码怎么样,这对帮助读取代码的人有什么帮助?

结论:通过缩小,我肯定会尝试使用JSLint的约定.我看到有些人在经过几个小时的尝试修复一个没有发生错误的错误,但是在缩小的代码中,最终会发现他们的JavaScript代码.不要把自己置于这种苦难之中; 分号一见钟情可能很难看,但是它们可以防止错误出现.

  • `var a = 1; var b = 7; var sum = a + b(a + b)`已经无效了,这应该如何证明你的观点? (2认同)