javascript的简明语法if语句没有大括号

时间:2012-07-27 12:39:04

标签: php javascript

如此务实,我对我正在寻找的内容有一个快速而肮脏的答案here。但为什么不使用这个好主意呢?为什么我找不到它的正式文件?它不是规范和标准的一部分吗?它没有得到广泛支持吗?是否只是因为缩小可能会使用该语法破坏代码?

如果你能指出我对该功能的更全面的文档,我会很感激。什么定义了if块的内容?是基于缩进吗?如果是的话,那会很有趣。

另一方面,PHP中的if语句是否存在类似于此语法的内容?我可以发誓,我已经看到他们在这里和那里被使用,但我找不到任何手头的例子。我只是疯了,它实际上不存在于PHP中,或者可以在PHP中使用那些类型的if块?在JS和PHP中,这样的if块是否也支持else

似乎还有一个基于缩进的缩进以及基于单行的语法。你有什么能告诉我以下情况?

if(condition) do_some_statement();

由于

4 个答案:

答案 0 :(得分:9)

  

但为什么不使用这个好主意?

因为它很难维护。

  

为什么我找不到它的正式文件?它不是规范和标准的一部分吗?

当然是,请参阅规范中的§12.5 - The if Statement§12 - Statementsif的正文是声明。一种语句 Block §12.1),它允许将语句列表视为一个语句,但还有许多其他类型的语句。

  

它没有得到广泛支持吗?

通用

  

是否只是因为缩小可能会破坏使用该语法的代码?

一个好的minifier不会破坏这种语法。 (一个好的minifier实际上会使使用。)

  

什么定义了if块的内容?它是基于缩进吗?

if语句的主体只包含它后面的语句,缩进在JavaScript中没有意义。所以这些都是等价的:

if (foo)
    bar();
charlie();

if (foo) bar();
charlie();

if (foo)
bar(); charlie();

    if (foo)
bar();
    charlie();

在上文中,bar的调用取决于foo;无论如何都会调用charlie

这就是为什么我们有 Block Statement ,它引入了一个被视为一个单元的语句列表(一个块,你可能会说:-)):< / p>

if (foo) {
    bar();
}
charlie();

if (foo) { bar(); }
charlie();

if (foo) {
bar(); } charlie();

    if (foo)
{ bar(); }
    charlie();

压痕对人类很重要,因此保持一致的压痕是一个好主意。上面每一个中的第一个例子对于我们凡人来说可能是最清楚的(列出的那些)。 : - )

  

另一方面,PHP中的if语句是否有类似的语法?

我不是一个很大的PHP头,但看起来很相似,在Control Structures - if中定义。有和没有{}的例子。 (还有一个不同的替代语法,我不会在这里讨论。)

  

这样的if块在JS和PHP中是否也支持else

是的,if支持else使用和不使用块。

答案 1 :(得分:0)

if之后的声明只是:声明

声明可以采用的一种形式是括号括起来的语句。

因此,if语句的语法是

if ( expression ) statement

因此,大括号提高可维护性的原因是它们为if控制流效果的影响范围提供了显式边界。

答案 2 :(得分:0)

  

为什么不使用这个好主意?

添加另一个声明很容易,并且只有在if通过时才会触发

  

为什么我找不到它的正式文件?

MDN documentation

条件计算结果为true时执行的语句。可以是任何语句,包括进一步嵌套的if语句。要执行多个语句,请使用块语句({...})对这些语句进行分组。

ECMA-262(第89页):

if(Expression)Statement

  

似乎有一个基于缩进的

没有。只是一个if,然后一个条件,然后是一个声明。该语句可以在同一行或下一行格式化。

JS中的空格并不重要。

答案 3 :(得分:0)

它是标准的,是规范(if-statementother statements)的一部分,并且在任何地方都受到支持。缩小不会破坏它,因为空格在JS中没有语义 - 它甚至会强制执行单行语句以保存两个大括号。

因此,它被广泛使用(没有问题!)。有时它被认为是错误的,因为在不添加大括号的情况下将语句附加到缩进的主体可能会导致问题。此外,当在嵌套ifs中使用时,它可能导致不稳定的行为:

if (false)
    if (whatever)
         ;
else
    alert("");

您是否预期会发出警报?不,else属于最后一个if

然而,你可以不关心那些肯定不会被扩展的单行语句,比如return;