不带大括号的javascript if语句的简明语法


Concise syntax for javascript if statements without curly brackets

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

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

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

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

if(condition) do_some_statement();

感谢

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

因为它很难维持。

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

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

它没有得到广泛支持吗?

普遍性。

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

一个好的迷你程序不会破坏这种语法。(事实上,一个好的缩小版会让使用。)

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

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

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

在上文中,只有bar的调用是以foo为条件的;不管怎样都调用charlie

这就是为什么我们有语句引入了要作为一个单元处理的语句列表(一个块,你可能会说:-)):

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

不过,压痕对人类来说很重要,所以保持一致的压痕是个好主意。上面每一个例子中的第一个例子对我们这些凡人来说可能是最清楚的。:-)

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

我不是一个大PHP头,但它看起来完全一样,在控制结构-if中定义。有使用和不使用CCD_ 15的示例。(还有一种不同的替代语法,我不会在这里讨论。)

这样的if块在JS和PHP中也支持else吗?

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

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

if后面的语句就是:语句

语句可能采用的形式之一是用大括号括起来的语句组

因此,if语句的语法是

if ( expression ) statement

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

为什么用它不是个好主意?

添加另一个语句并期望它只在if通过时激发是非常容易的

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

MDN文档:

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

ECMA-262(第89页):

if(表达式)语句

似乎有一个基于压痕的

没有。只是一个如果,然后是一个条件,然后是语句。该语句可以在同一行或下一行设置格式。

空白在JS中并不重要。

它是标准的,是规范的一部分(if语句、其他语句),在任何地方都受支持。最小化并没有破坏它,因为空白在JS中没有语义——它甚至会为单行语句强制执行它来保存两个大括号。

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

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

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

然而,您可以将它用于肯定不会被扩展的单行语句,如return;