我曾经听说,在一行语句中使用花括号对JavaScript是有害的。我不记得推理了,谷歌搜索也没有多大帮助。

在JavaScript中,把所有语句都用大括号括起来是一个好主意吗?

我这么问,因为似乎每个人都这么做。


当前回答

有很多好的答案,所以我不会重复,除了说我的“规则”时,大括号可以省略:条件'返回'或'抛出'(例如)作为他们的唯一声明。在这种情况下,流控制已经清楚地表明它正在终止:

由于终止流控制,即使是“坏情况”也可以快速识别(并修复)。这个概念/结构“规则”也适用于许多语言。

if (x)
    return y;
    always();

当然,这也是为什么人们可能会使用linter..

其他回答

总是发现

if(valid) return;

对我的眼睛来说比

if(valid) {
  return;
}

还有条件的,比如

(valid) ? ifTrue() : ifFalse();

(我个人的观点)是否更容易阅读

if(valid) {
  ifTrue();
} else {
  ifFalse();
}

但我想这归结于编码风格

有时他们似乎是需要的!我自己都不敢相信,但是昨天我在Firebug会议上(最近的Firefox 22.0)突然想到

if (! my.condition.key)
    do something;

执行do something,尽管my。condition。key为true。添加括号:

if (! my.condition.var) {
    do something;
}

解决了这个问题。有无数的例子表明,它显然可以在没有括号的情况下工作,但在这种情况下,它肯定没有。

倾向于在一行中放入多个语句的人当然应该总是使用大括号,因为

if (condition)
    do something; do something else;

很难找到。

除了@Josh K提到的原因(这也适用于Java, C等),JavaScript中的一个特殊问题是自动分号插入。维基百科的例子如下:

return
a + b;

// Returns undefined. Treated as:
//   return;
//   a + b;

因此,如果像这样使用,也可能会产生意想不到的结果:

if (x)
   return
   a + b;

写也没好到哪里去

if (x) {
   return
   a + b;
}

但也许这里的错误更容易检测(?)

这个问题问的是一行中的语句。然而,提供的许多示例说明了不要基于多行语句省略大括号的理由。在一行中不使用括号是完全安全的,如果这是您喜欢的编码风格的话。

例如,问题问这样做是否可以:

 if (condition) statement;

它不会问这是否ok:

 if (condition)
   statement;

我认为去掉括号更可取,因为它使代码更具可读性,语法更少。

我的编码风格是永远不用括号,除非代码是一个块。不要在一行上使用多个语句(用分号分隔)。我发现这很容易阅读和清楚,从来没有“if”语句的范围问题。因此,在单个if条件语句上使用括号需要3行。是这样的:

 if (condition) {
   statement;
 }

使用一行if语句更可取,因为它使用的垂直空间更少,代码更紧凑。

我不会强迫其他人使用这种方法,但它对我来说是有效的,我非常不同意所提供的关于省略括号如何导致编码/范围错误的例子。

这是一个风格问题,但花括号有助于防止可能的悬空。