什么`ExpressionNoIn`在ECMAScript规范中意味着什么?

时间:2015-03-27 20:39:04

标签: javascript ecmascript-5

我正在深入研究for循环并在http://www.ecma-international.org/ecma-262/5.1/#sec-12.6.3的规范中遇到ExpressionNoIn

这是什么意思?

2 个答案:

答案 0 :(得分:6)

section 11.14"逗号运算符(,)"

中解释

Comma Operator ECMA Spec

*NoIn具有相同的结构,但不包括使用in关键字,第11.8节"关系运算符":

Relational Operators ECMA Spec

规范说:

  

" 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循环。