ECMAScript AssignmentExpression 生产规则如何生成 'foo = 42'?

How can ECMAScript AssignmentExpression production rule produce `foo = 42`?

提问人:szcsl 提问时间:7/18/2020 更新时间:7/18/2020 访问量:80

问:

正如规范所述(是的,5.1,这是故意的):

AssignmentExpression :

    ConditionalExpression
    LeftHandSideExpression = AssignmentExpression
    LeftHandSideExpression AssignmentOperator AssignmentExpression

基于这个定义,我不明白一个简单的分配是如何有效的。foo = 42

我的理解是,这应该始终跟在一个或本质上是另一个赋值之后,但在这种情况下,如果我不使用 ?所有进一步的规则都需要 a 或另一个 .foo =ConditionalExpressionConditionalExpressionAssignmentExpressionConditionalExpressionAssignmentExpression

我在这里错过了什么?

JavaScript ECMASCRIPT-5 规范 Assignment-Operator

评论

0赞 ibrahim mahrir 7/18/2020
紧随其后的部分解释了如何处理foo = 42
0赞 Bergi 7/18/2020
是的,您应该使用该规则。文字是有效的(因为它是有效的),尝试追踪它!ConditionalExpression42ConditionalExpressionAssignmentExpression
0赞 szcsl 7/18/2020
@Bergi谢谢你的提示,你是对的。显然,我确实尝试过追踪它,但停在了,认为我一定走错了路。:D如果您发布 asnwer,我很乐意接受它!BitwiseXORExpression
0赞 szcsl 7/18/2020
@ibrahimmahrir感谢您的提示。不幸的是,该部分没有解释生产是如何终止的,只是解释了如何评估这样的表达式。Bergi 在您的评论后给出了正确的提示。

答:

1赞 Bergi 7/18/2020 #1

运算符后面的表达式必须始终是 AssignmentExpression。此 AssignmentExpression 通常不是由另一个赋值组成,而是由一个普通的 ConditionalExpression 组成,而 ConditionalExpression 又由一个更简单的表达式组成,该表达式可能包含运算符,也可能不包含运算符,一直到运算符优先级层次结构,一直到数字形成的 Literal=123