Javascript JSLint在If块周围使用大括号
在Javascript中,如果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();
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将如何处理此代码感到不舒服,即使我可以推理:
如果你知道ASI是做什么的,这不是不可能的,甚至不是很难的,但是ASI是一个非常重要的算法。在你的头脑中运行它在时间上是昂贵的,因此如果你只是避免模棱两可(从这个意义上说,根据ECMA-262规范,不模棱两可)的情况就更好了if(foo) bar() baz()
- 这会让你的台词比需要的长。这可能被认为是一个非问题,取决于您的编码约定,如果您的条件很长,并且您的语句也很长,那么生成的单行语句将对眼睛的阅读造成更大的负担(众所周知,您的眼睛很难阅读非常孤立的行,因此段落)
如果出于某种原因,尽管使用大括号,您仍然可以使用以下形式的内容:
这实际上和你的代码是一样的,但我认为没有理由不把大括号放在那里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”选项吗?这正是我要找的。