ECMAScript 中的表达式语句实际上是什么
What expression statements in ECMAScript actually are
假设在某个解析过程中,我已经遍历了以下语法推导:
Script -> ScriptBody -> StatementList -> ExpressionStatement -> Expression
麻烦来了。根据规范,ExpressionStatement
中的 Expression
只能以 AssignmentExpression
或它们的序列结束。但是,像
这样的语句
a;
12;
"some text";
绝对是表达式语句(据我所知),同时不是 AssignmentExpression
的任何可能子类型。它们无法解决我浏览器中的语法错误。
这些语句 return 值是特定实现或引擎的功能,还是我在规范中遗漏了什么?也许,这些根本不是 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
。其他文字和变量引用也是如此。
假设在某个解析过程中,我已经遍历了以下语法推导:
Script -> ScriptBody -> StatementList -> ExpressionStatement -> Expression
麻烦来了。根据规范,ExpressionStatement
中的 Expression
只能以 AssignmentExpression
或它们的序列结束。但是,像
a;
12;
"some text";
绝对是表达式语句(据我所知),同时不是 AssignmentExpression
的任何可能子类型。它们无法解决我浏览器中的语法错误。
这些语句 return 值是特定实现或引擎的功能,还是我在规范中遗漏了什么?也许,这些根本不是 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
。其他文字和变量引用也是如此。