6

所以务实地说,我对我在这里寻找的东西有一个快速而肮脏的答案。但是为什么不使用这个好主意呢?为什么我找不到它的任何正式文件?它不是规范和标准的一部分吗?它没有得到广泛的支持吗?仅仅是因为缩小会破坏使用该语法的代码吗?

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

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

似乎也有基于缩进的语法以及基于单行的语法。关于以下内容,您能告诉我什么?

if(condition) do_some_statement();

谢谢

4

5 回答 5

9

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

因为很难维护。

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

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

它没有得到广泛的支持吗?

普遍。

仅仅是因为缩小会破坏使用该语法的代码吗?

一个好的缩小器不会破坏这种语法。(事实上​​,一个好的缩小器会利用它。)

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

语句的主体仅由其后的if语句组成,缩进在 JavaScript 中没有意义。所以所有这些都是等价的:

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

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

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

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

在上面,只有调用bar是有条件的foocharlie无论如何都被调用。

这就是我们有Block的原因,该Statement引入了被视为一个单元的语句列表(一个块,你可能会说 :-)):

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

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

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

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

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

if另一方面,PHP中的语句是否有类似于这种语法的东西?

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

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

是的,if支持else带块和不带块。

于 2012-07-27T12:43:37.370 回答
3

javascript 对空格不敏感,这意味着

if(condition) do_some_statement();

是相同的

if(condition)
    do_some_statement();

话虽如此,在单行 if 语句中省略大括号总是不受欢迎,因为如果需要修改 if 语句,它可能会导致错误:

if(condition)
    do_some_statement();
    // someone adds another line here, without adding the braces
    // now you've introduced a bug

还有,写字真的那么难{ }吗?:P

于 2012-07-27T12:44:03.593 回答
0

an 之后的语句if就是:一个语句

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

因此,if语句的语法是

if ( expression ) statement

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

于 2012-07-27T12:44:53.797 回答
0

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

if添加另一个语句并期望它仅在通过时触发是很容易的

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

MDN文档:

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

ECMA-262(第 89 页):

if ( 表达式 ) 语句

似乎有一个基于缩进的

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

JS 中的空格并不重要。

于 2012-07-27T12:46:25.370 回答
0

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

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

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

你会期待警报吗?不,else属于最后一个if

但是,您可以将它用于肯定不会被扩展的单行语句,例如return;.

于 2012-07-27T12:56:28.300 回答