这行得通。

var a = 'ontouchstart' in window;
for (;;) {
  console.log(a);
  break;
}

这会导致语法错误。为什么?
for (var a = 'ontouchstart' in window;;) {
  console.log(a);
  break;
}

这行得通。
for (var a = ('ontouchstart' in window);;) {
  console.log(a);
  break;
}

最佳答案



为了避免与for-in-loop混淆。 syntax specification for for-loops是显式的:



NoIn后缀遍布整个语法语法,并以11.8 Relational Operators (Syntax) section结尾:

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循环中使用NoIn变体-在生产中它们是合理的。我想这是为了避免程序员的困惑并简化解析器。

09-12 05:26