This causes a syntax error. Why?
To avoid confusion with for-in-loop. The syntax specification for for-loops is explicit:
IterationStatement : for ( ExpressionNoIn <sub> opt sub> ; Expression <sub> opt sub> ; Expression <sub> opt sub> ) Statement
IterationStatement : for ( var VariableDeclarationListNoIn ; Expression <sub> opt sub> ; Expression <sub> opt sub> ) Statement
This NoIn suffix extends throughout the syntactic grammar and ends in Section 11.8 Relational Operators (Syntax) :
RelationalExpression : ShiftExpression RelationalExpression < ShiftExpression RelationalExpression > ShiftExpression RelationalExpression <= ShiftExpression RelationalExpression >= ShiftExpression RelationalExpression instanceof ShiftExpression RelationalExpression in ShiftExpression RelationalExpressionNoIn : ShiftExpression RelationalExpressionNoIn < ShiftExpression RelationalExpressionNoIn > ShiftExpression RelationalExpressionNoIn <= ShiftExpression RelationalExpressionNoIn >= ShiftExpression RelationalExpressionNoIn instanceof ShiftExpression
NOTE. NoIn options NoIn needed to avoid confusing the in operator in a relational expression with the in operator in the for statement.
However, I donβt understand why NoIn options NoIn used in the usual for-loop - they are reasonable for in-in-productions. I assume that this will avoid the confusion of the programmer and simplify the parser.
Bergi
source share