【问题标题】:Do 'if' statements in JavaScript require curly braces? [duplicate]JavaScript 中的“if”语句是否需要大括号? [复制]
【发布时间】:2011-08-19 06:43:35
【问题描述】:

可能重复:
Are curly braces necessary in one line statements in JavaScript?

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

if(foo)
    bar;

这样好吗?

【问题讨论】:

    标签: javascript if-statement


    【解决方案1】:

    是的,它有效,但只能在 '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) 回到“不太漂亮”的方式,并且在此过程中,当我只想添加一行时,通过修改多行来创建一个丑陋的差异。似乎使用卷曲开始是最明智的选择。
    【解决方案2】:

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

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

    这不会运行foobar,因为else 属于第二个if 语句。用大括号没问题:

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

    【讨论】:

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

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

    但应该避免:

    【讨论】:

      【解决方案4】:

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

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

       if (foo) bar;
      

      不过,在大多数情况下,使用大括号可以提高代码的清晰度,这是一件好事。代码的阅读次数多于编写次数,并且应该尽可能明确。

      此外,如果您在某些时候需要添加第二条语句,那么无论如何您肯定需要花括号。

      【讨论】:

      • 2 行有什么歧义?我认为在一行下面有一个单独的声明会更加混乱。语法是单词if,后跟(,然后是expression,然后是),然后是statement,其中{ statements };是一个语句,在你的例子中还有bar;。它是明确的,你只需要知道一个语句是什么......
      • @grinch 这是循环推理。世界上没有什么是模棱两可的,只要你能立即准确地知道它是什么。
      • 我的意思是这是在语言语法中定义的,那么它怎么可能有歧义呢?不知道构成 if 语句的语言结构不会使其模棱两可。
      • 当然,这对词法分析器来说并不模棱两可。关键是人类不是词法分析器。再说了,这个讨论已经一千遍了,这里不是再做的地方。每个 JS 静态分析工具都会将缺少的花括号标记为错误,这是有原因的。
      猜你喜欢
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      相关资源
      最近更新 更多