JavaScript 中的“if”语句需要花括号吗?

IT技术 javascript if-statement
2021-02-02 02:25:32

可能的重复:
在 JavaScript 中的一行语句中是否需要大括号?

我对此几乎持肯定态度,但我想确保避免错误代码。在 JavaScript 中,单个if语句需要花括号吗?

if(foo)
    bar;

这个可以吗?

4个回答

是的,它有效,但最多只能在“if”或“else”语句之后一行。如果需要使用多行,则需要使用大括号。

以下将起作用

if(foo)
   Dance with me;
else
   Sing with me;

以下内容不会按照您希望的方式工作。

if(foo)
   Dance with me;
   Sing with me;
else
   Sing with me;
   You don't know anything;

但是,如果按照以下给出的方式更正上述内容,那么它对您有用:

if(foo){
   Dance with me;
   Sing with me;
}else{
   Sing with me;
   You don't know anything; 
}
所以在第一个例子中,如果我想在if语句中添加一行,我的选择是 1) 破坏代码或 2) 回到“不太漂亮”的方式,并在此过程中通过修改多行来创建一个丑陋的差异当我只想添加一个时。似乎使用 curlies 开始是最明智的选择。
2021-04-13 02:25:32

虽然省略它们在语法上是可以的,但您不应该这样做。歧义严重的一种情况是

if (false)
    if (true) foo();
else
    bar();

这既foo不会运行,也不会运行bar因为else属于第二个if语句。如果使用大括号没问题:

if (false) {
    if (true) { foo(); }
} else {
    bar();
}
加 1 为双倍 if 示例,今天被这个击中了。
2021-03-27 02:25:32
我认为歧义问题被夸大了,尤其是当它被用作反对省略大括号的论据时。在编写单个语句/表达式/语法“复合”(例如if (...)每行)时(无论如何都应该这样做,遵循代码可读性的论点),这永远不会成为问题,因为人们会自动为多行使用大括号。
2021-03-28 02:25:32
我同意上面的问题,但不同意解决方案......如果你总是只有一行的条件,即 foo() 总是在另一行,然后你采用一种风格,其中任何 if 或 else 超过一行得到 {},这是非常简单的代码。我总是讨厌将不止一个东西串在一起的代码,if(true) foo(); 对我来说总是在不同的行上。在 if/else 的情况下,第一个 if 会curl,第二个 if 不会,而 else 不会。只是我的 2 美分...
2021-03-28 02:25:32
这是一个著名的解析器问题,称为“dangling else”
2021-04-01 02:25:32

是的,这是允许的。之前也讨论过:

但应该避免:

是的,它在语法上是有效的。但它被认为是不好的风格。

如果你把它写在一行上,你可能会争辩说在某些情况下它是可以的,因为它是明确的。

 if (foo) bar;

但在大多数情况下,使用大括号会增加代码的清晰度,这是一件好事。代码的阅读次数多于编写次数,因此代码应尽可能明确。

此外,如果您在某个时候需要添加第二个语句,无论如何您肯定需要curl。

我的意思是,这是在语言语法中定义的,所以它怎么会模棱两可呢?不知道构成 if 语句的语言结构并不会使它产生歧义。
2021-03-15 02:25:32
@grinch 这是循环推理。世界上没有什么是模棱两可的,只要你准确而即时地知道它是什么。
2021-03-17 02:25:32
如何在 2 行上不明确?我认为在一行下面加上单独的声明会更令人困惑。语法是单词if后跟(后跟 anexpression后跟)a statement,这 { statements };是一个语句,以及bar;在您的示例中。这是明确的,你只需要知道什么是声明......
2021-04-01 02:25:32
当然,这对词法分析器来说并不含糊。关键是人类不是词法分析器。再说了,这个讨论已经经历了一千次了,这里也不是重来的地方。每个用于 JS 的静态分析工具都将缺少的curl标记为错误是有原因的。
2021-04-08 02:25:32