这会导致语法错误。为什么?
避免与 for-in-loop 混淆。for 循环的语法规范是明确的:
IterationStatement : for ( ExpressionNoIn
opt
; Expression
opt
; Expression
opt
) Statement
IterationStatement : for ( var VariableDeclarationListNoIn ; Expression
opt
; Expression
opt
) Statement
这个NoIn
后缀贯穿整个句法语法,并在11.8 关系运算符(句法)部分结束:
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
注意:NoIn
需要变体以避免将关系表达式中的 in 运算符与 for 语句中的 in 运算符混淆。
但是,我自己不明白为什么NoIn
在正常的 for 循环中使用变体 - 它们在 for-in-production 中是合理的。我猜这是为了避免程序员的混淆并简化解析器。