我正在深入研究for循环并在http://www.ecma-international.org/ecma-262/5.1/#sec-12.6.3的规范中遇到ExpressionNoIn
这是什么意思?
答案 0 :(得分:6)
在section 11.14"逗号运算符(,)"
中解释
*NoIn
具有相同的结构,但不包括使用in
关键字,第11.8节"关系运算符":
规范说:
" NoIn"需要使用变体来避免将
in
运算符与in
语句中的for
运算符混淆在关系表达式中。
由于in
可能以两种方式使用:
for (var x in foo) { ... }
或者:
if ('x' in foo) { ... }
" NoIn"变体是在in
循环的第一个表达式中无法使用上面的for
的第二个版本。因此,以下代码无效:
for (y = 'x' in foo; y; y = false) { ... }
答案 1 :(得分:1)
ExpressionNoIn
是一个非终端,可以从中导出所有表达式,期望in
操作(即'prop' in obj
)。
从底部(ExpressionNoIn
已定义的地方)跟踪A3到第一个*NoIn
非终端,该终端不再包含(不同的)*NoIn
非终端:
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
我想这可以更容易区分for
循环和for/in
循环。