Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript无分号代码样式和精简?_Javascript_Node.js - Fatal编程技术网

JavaScript无分号代码样式和精简?

JavaScript无分号代码样式和精简?,javascript,node.js,Javascript,Node.js,我正在尝试决定是否值得使用JavaScript无分号样式 如果我的JavaScript代码没有分号: function(){ var first = 1 var second = 2 sum = 1 + 2 return sum } 它将在浏览器和浏览器中工作 但是,在浏览器和Node.js中,缩小(通过丑陋的方式)的代码会起作用吗 我读过这篇文章。它说它应该工作。不要这样做。这是一件非常危险的事情。规模的增加不值得增加风险 如果你这样做,道格拉斯·克罗克福德不

我正在尝试决定是否值得使用JavaScript无分号样式

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

function(){
    var first = 1
    var second = 2
    sum = 1 + 2
    return sum
}
它将在浏览器和浏览器中工作

但是,在浏览器和Node.js中,缩小(通过丑陋的方式)的代码会起作用吗

我读过这篇文章。它说它应该工作。

不要这样做。这是一件非常危险的事情。规模的增加不值得增加风险


如果你这样做,道格拉斯·克罗克福德不会喜欢你的:)

喂,不要那样做。你不会得到那么多,分号可以自动放在那里,也可以放在一个会产生奇怪bug的地方。

编译器和缩微器可能足够智能,可以在需要时添加分号(如果它有助于缩小过程)

然而!分号告诉解释器这是语句的结尾。如果缺少该语句,则必须查看下一行的开头,以确定继续该语句是否有意义。然后它将决定下一行是新语句(即缺少分号)还是上一行语句的继续


没有分号,你会减慢速度!更不用说,当执行我描述的算法的解释器判断错误时,这可能会引入一些模糊的错误

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

  • 这会使您的代码容易受到删除空白(用于缩小)所导致的错误的攻击:尝试以下操作:

    var a=1;var b=7;var总和=a+b (a+b)

它缩小为
var a=1,b=7,sum=a+b(a+b),这将导致错误
编号不是一个函数
。还有和

更新:此错误不是由于缩小而导致的,但是,下一个错误是:

  • 它使您的代码容易受到因缩小而导致的错误的攻击:尝试:

      var isTrue = true
    
      function doSomething() { return 'yeah' }
    
      function doSomethingElse() { return 'yes, dear' }
    
      doSomething()
    
      !isTrue && doSomethingElse()
    
    缩小到:

      var isTrue=true;function doSomething(){return "yeah"}function doSomethingElse(){return "yes, dear"}doSomething()!isTrue&&doSomethingElse();
    
    其结果是:

      SyntaxError: Unexpected token !
    
  • 这会降低代码的可读性和易维护性:使用分号已被公认为良好实践,训练有素的JavaScript开发人员会对试图逃避约定的代码感到困惑

另一件事是,你必须问自己:省略分号到底有什么好处

  • 干净代码?如果希望JavaScript看起来不像JavaScript,请尝试。但也有人认为,上述陷阱可以通过«简单解决方案:当一行以括号开头时,在它前面加一个分号»来消除。这段干净的代码是如何做到的?它如何帮助任何人阅读您的代码

一句话:对于缩小,我肯定会尝试使用的约定。我见过一些人在几个小时试图修复一个bug后,终于将他们的JavaScript代码过滤掉了。这个bug不是在未整理的代码中发生的,而是在精简的代码中发生的。不要让自己陷入这种痛苦之中;分号乍一看可能很难看,但它们能把bug挡在外面。

我个人是一个支持分号的人,但有一个令人信服的理由支持另一种选择,而这通常不是。与所有编码风格的争论一样,这将是一场没有合理结论的永无止境的辩论。做你和你的团队觉得更舒服的事情

如果您确实采用简捷的分号方法,请确保您和您的团队正确理解(ASI)和语句终止规则。无论你的决定是什么,这绝对是一件好事

关于缩小:如果你不想因为没有正确地进行ASI而冒着缩小程序bug的潜在头痛和报告并修复它(或等待修复)的相关负担的风险,那么就不要依赖ASI

  • Isaacs(维护者,因此在本问题中缩小不可知论者)
  • 他推荐这个很好

如果只是为了替换换行符,缩小应该在需要的地方添加分号。@Pointy,+1,离开他的
键!(因为尖尖的东西通常是尖锐的)在一种几乎拥有每个大括号和分号语法的语言中不使用分号并不能使代码看起来更干净!虽然我讨厌CoffeeScript语法,但它可能值得你一看……我是@ThiefMaster:讨厌CoffeeScript语法。我能想象的唯一一个认为没有分号的代码看起来更干净的人是BASIC和COBOL开发人员(名字像
WHITECOLOR
,如果我对你的背景是正确的,我一点也不会感到惊讶;p)我将要求ECMA制作
每句话末尾的要求,从第一天开始我就应该这样读:-D据我所知,道格拉斯·克罗克福德永远不会喜欢你;)(如果你的代码不完全像他一样)@WHITECOLOR:虽然那篇文章中的一切都是真的,但我还是建议你不要这样做。您阅读的每个示例代码都会有分号,就是这样。此外,与自动插入分号相关的问题可能很难调试。这个答案对其答案毫无道理:-1。请给出你的观点的理由并证明你的结论。当你是一名程序员时,分号是一件你不能忘记的好事。除了一些编程语言,他们不使用分号,我建议你应该使用分号来帮助你的代码清晰。似乎唯一模棱两可的情况是下一个语句开始时用大括号“(”@WHITECOLOR口译员还需要看下一行才能做出决定。也许这是值得的,但对每一行这样做会让事情变慢。谢谢,你的意见对我很有帮助。
var a=1;var b=7;var sum=a+b(a+b)
已经无效,这应该如何证明你的观点?@FelixKling True,我在那里迷路了。更正了它,并加入了一个论证来证明我的观点。