操作员使用预增量进行分配

时间:2014-04-09 08:53:39

标签: javascript operators

对于循环变量(通常是数组索引),我在循环中进行了大量的预递增和模数分配。在其他语言中,这看起来像

++_index %= LENGTH;

(多行分解版)

_index++;
_index = _index % LENGTH;

这当然会将_index增加1,然后将模数赋予自身。

但是我在Javascript中遇到这个问题我遇到了可怕的ReferenceError: Invalid left-hand side in assignment

我怀疑它实际上正在做的是尝试分配一个名为"++_index"的变量的模数,当然,没有任何变量作为其无效。

我尝试使用括号,希望它能正确读取_index,但这似乎仍然是一个半身像。

(++_index) %= LENGTH;

我已经使用了

的细分版本
++_index;
_index %= LENGTH;

但是我找不到任何关于手头问题的文件。我所有的google-fu都会在if语句中使用=带回来。

有远远优于google-fu的人可以指导我一些可以更深入地解释这个问题的文档。正如我所说的,我怀疑它试图对++_index进行赋值,而不是对它进行求值,递增它并将引用传递给下一个赋值模的阶段。但某些(或某人)确认或否认这将是最有益的。

1 个答案:

答案 0 :(得分:0)

JavaScript前缀增量运算符不返回引用,它只返回一个值。分配给某个号码无效,这就是为什么它会抛出ReferenceError

你要么必须这样做:

_index = ++_index % LENGTH;

或者这个:

++_index;
_index %= LENGTH;

Specification

  
      
  1. expr 成为评估 UnaryExpression 的结果。
  2.   
  3. oldValue 为ToNumber( GetValue( expr )。
  4.   
  5. ReturnIfAbrupt(属性oldValue )。
  6.   
  7. newValue 是将值1添加到 oldValue 的结果,使用与+运算符相同的规则(参见12.7) 0.5)。
  8.   
  9. 让状态为PutValue( expr newValue )。
  10.   
  11. ReturnIfAbrupt(状态)。
  12.   
  13. 返回 newValue
  14.