Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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 JSLint在If块周围使用大括号_Javascript_Jslint - Fatal编程技术网

Javascript JSLint在If块周围使用大括号

Javascript JSLint在If块周围使用大括号,javascript,jslint,Javascript,Jslint,在Javascript中,如果if表达式后面没有花括号,则以下语句放在if块中。就是 if(foo) bar(); baz(); 相当于 if(foo) { bar(); } baz(); Douglas Crockford建议不要使用第一个,因为如果程序员试图在不带大括号的if块中添加语句,这会造成混淆,并导致难以跟踪错误。因此,如果使用第一个表单,JsLint会抱怨 我一直在使用它,我觉得如果您将该语句与if语句放在同一行上,它就不是问题了,如下所示: if(foo) bar();

在Javascript中,如果
if
表达式后面没有花括号,则以下语句放在
if
块中。就是

if(foo)
bar();
baz();
相当于

if(foo) {
  bar();
}
baz();
Douglas Crockford建议不要使用第一个,因为如果程序员试图在不带大括号的
if
块中添加语句,这会造成混淆,并导致难以跟踪错误。因此,如果使用第一个表单,JsLint会抱怨

我一直在使用它,我觉得如果您将该语句与
if
语句放在同一行上,它就不是问题了,如下所示:

if(foo) bar();
baz();
foo && bar();
baz();
这在视觉上比全括号形式更简洁,我从来没有对它产生过混淆。为了能通过JsLint而不产生太多的视觉噪音,我有时会使用一种不太惯用的形式,这种形式依赖于运算符短路,如下所示:

if(foo) bar();
baz();
foo && bar();
baz();
你们可能都在等我快点问个问题,所以就这样:
如果格式正确,在单行条件语句上不使用大括号通常被认为是不好的做法吗?为什么?JsLint是否有合理的理由对此进行投诉?

JsLint检查您的代码是否为Crockford样式。它有一个分支,叫做可定制的,而且工作起来不那么烦人

下面是一个验证良好的代码(除了可能很快就会修复的代码:)

在阅读中:

  • 您可能不习惯这种编码风格,可能会认为这会执行以下两个功能:

    if(foo) bar();
            baz();
    
  • 由于JS具有自动插入分号的功能,因此存在更为模糊的情况。一、 例如,我对ASI将如何处理此代码感到不舒服,即使我可以推理:

    if(foo) bar()
            baz()
    
    如果你知道ASI是做什么的,这不是不可能的,甚至不是很难的,但是ASI是一个非常重要的算法。在你的头脑中运行它在时间上是昂贵的,因此如果你只是避免模棱两可(从这个意义上说,根据ECMA-262规范,不模棱两可)的情况就更好了

  • 这会让你的台词比需要的长。这可能被认为是一个非问题,取决于您的编码约定,如果您的条件很长,并且您的语句也很长,那么生成的单行语句将对眼睛的阅读造成更大的负担(众所周知,您的眼睛很难阅读非常孤立的行,因此段落)

    如果出于某种原因,尽管使用大括号,您仍然可以使用以下形式的内容:

    if(foo)
        bar();
    
    这实际上和你的代码是一样的,但我认为没有理由不把大括号放在那里

以书面形式:

  • 当您需要添加另一条语句时,您不会简单地编写它。要做到这一点,您必须重构周围区域。再说一次,这一点也不难,但这是一件额外的事情需要考虑,这与你的问题或你对问题的解决方案都无关,这只是一个句法上的怪癖

    我想你已经明白了这一点,但情况就是这样

    初始代码:

    if(foo) bar();
    
    更改代码:

    if(foo) bar(); baz();
    
    您可以清楚地看到这个问题,但它不一定会在例行代码检查中出现。如果您的测试用例没有覆盖这个特定的代码路径,那么这可能会因为重复的编码器疏忽而被推到生产环境中,不需要显式地对块进行分隔,这会变得更容易。 你可以采用的解决方案,正如你所拥有的,是说类似于
    if(foo)bar()&&baz()
    ,但是如果
    bar()
    是虚假的,那么这将失败,因此你最终会得到像
    if(foo)(bar(),baz())这样丑陋的东西这是可行的,但肯定非常难看


就我个人而言,我只在行很短时使用单行
if
语句,而且算法本身也很短。类似于
if(额外的_循环)-i或<代码>如果(!有效)中断当您开始向这些单行ifs添加
else
s时,该结构将变得越来越危险


简而言之,你可以使用它,但使用它时要知道它的利弊,就像使用其他工具一样。

是的。没有理由不使用大括号,如果您需要将if语句扩展到多行,它会让您的工作更轻松。循环也是如此。如果你想要一些不那么严格的东西,可以试试JSHint。我在其他语言(如C#和C++)上读过的大多数样式指南都认为这是一种不好的做法。如果额外的2行使方法占用了太多的垂直空间,那么该方法可能太长,需要重构。短路习语(我知道这个习语一直存在)让我畏缩,它散发着可爱的气味,模糊了我的意图。只要使用
if(foo){bar();}
(一行)就行了,克罗克福德是个仁慈的独裁者。按照他的建议去做是明智的。“curly:false”的失败在于它不会抱怨最初的糟糕形式。我们需要的是一个“smartcurly:true”,它会抱怨缺少卷发,除非它们用于单行if语句。这在道德上类似于“smarttabs”,它不抱怨使用空格“对齐”的制表符缩进块(例如,“\t/***\n\t*blah\n\t*blah\n\t*/”),有人知道如何编写和附加此“smartcurly”选项吗?这正是我要找的。