在Ecmascript 5.1中,提到if语句中没有左大括号是可以接受的吗?

时间:2012-07-31 17:20:34

标签: javascript ecmascript-5

我无法回想起if语句的规则,所以我查看了第12.5条,但是如果大括号是必要的话,对我来说还不是很明显。所以,我想问一下,在Ecmascript 5.1中,提到if语句中没有左大括号是可以接受的吗?

1 个答案:

答案 0 :(得分:6)

以下是12.5节中的if语句的语法:

IfStatement : 
    if ( Expression ) Statement else Statement 
    if ( Expression ) Statement

从它的外观来看,不需要花括号,但我们需要澄清一个完整的陈述是什么。该语法可在第12节中找到。

Statement : 
    Block 
    VariableStatement 
    EmptyStatement 
    ExpressionStatement 
    IfStatement 
    IterationStatement 
    ContinueStatement 
    BreakStatement 
    ReturnStatement 
    WithStatement 
    LabelledStatement 
    SwitchStatement 
    ThrowStatement 
    TryStatement 
    DebuggerStatement 

如果我们深入研究12.1节,我们将找到块语句的定义。

Block : 
    { StatementListopt } 

我们发现了花括号,但这是否意味着它们是必需的?答案是不。在检查语句的语法时,冒号后面的每个元素都被视为一个语句,因此是if语句语法的有效部分。以下是有效if语句的实际示例。

// if ( Expression ) ReturnStatement
if (true) 
    return false;

// if ( Expression ) Block
if (true) {
    return false;
}

// if ( Expression ) TryStatement
if (true) try {
    return false;
} catch (e) {
    return e;
}

// if ( Expression ) EmptyStatement
if (true) ;

// if ( Expression ) IfStatement
if (true)
    if (false)
        return false;