ECMAScript 规范中的 ExpressionNoIn 是什么意思?
What does `ExpressionNoIn` mean in the ECMAScript spec?
我正在深入研究 for 循环并在 http://www.ecma-international.org/ecma-262/5.1/#sec-12.6.3
的规范中遇到 ExpressionNoIn
这是什么意思?
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
循环。
在section 11.14中有说明 "Comma Operator ( , )":
*NoIn
具有相同的结构,只是在第 11.8 节中排除了 in
关键字的使用 "Relational Operators":
规范说:
The "NoIn" variants are needed to avoid confusing the in
operator in a relational expression with the in
operator in a for
statement.
因为in
有两种用法:
for (var x in foo) { ... }
或:
if ('x' in foo) { ... }
"NoIn" 变体使得无法在 for
循环的第一个表达式中使用上面 in
的第二个版本。所以,下面的代码是无效的:
for (y = 'x' in foo; y; y = false) { ... }
我正在深入研究 for 循环并在 http://www.ecma-international.org/ecma-262/5.1/#sec-12.6.3
的规范中遇到ExpressionNoIn
这是什么意思?
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
循环。
在section 11.14中有说明 "Comma Operator ( , )":
*NoIn
具有相同的结构,只是在第 11.8 节中排除了 in
关键字的使用 "Relational Operators":
规范说:
The "NoIn" variants are needed to avoid confusing the
in
operator in a relational expression with thein
operator in afor
statement.
因为in
有两种用法:
for (var x in foo) { ... }
或:
if ('x' in foo) { ... }
"NoIn" 变体使得无法在 for
循环的第一个表达式中使用上面 in
的第二个版本。所以,下面的代码是无效的:
for (y = 'x' in foo; y; y = false) { ... }