ECMAScript 中的表达式语句实际上是什么



假设在解析过程的某个时刻,我已经遍历了以下语法派生:

Script -> ScriptBody -> StatementList -> ExpressionStatement -> Expression

麻烦来了。根据规范,ExpressionStatement中的Expression只能以AssignmentExpression或一系列形式结束。但是,像这样的陈述

a;
12;
"some text";

绝对是表达式语句(据我所知(,同时不是AssignmentExpression的任何可能的子类型。它们无法解析为我的浏览器中的语法错误。

这些语句返回值是特定实现或引擎的功能,还是我在规范中缺少某些内容?也许,这些根本不AssignmentExpressions,我把它们误认为是别的东西?

当你查看AssignmentExpression的定义时,你会发现它解析为,例如,AssignmentExpression->ConditionalExpression->LogicalORExpression->LogicalANDExpression->BitwiseORExpression->BitwiseXORExpression->BitwiseANDExpression->EqualityExpression->RelationalExpression->ShiftExpression->AdditiveExpression->MultiplicativeExpression->ExponentiationExpression->UnaryExpression->UpdateExpression->LeftHandSideExpression->NewExpression->MemberExpression->PrimaryExpression->Literal->StringLiteral

所以"some text"是一个有效的AssignmentExpression.其他文字和变量引用也是如此。

最新更新