对于循环变量(通常是数组索引),我在循环中进行了大量的预递增和模数分配。在其他语言中,这看起来像
++_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
进行赋值,而不是对它进行求值,递增它并将引用传递给下一个赋值模的阶段。但某些(或某人)确认或否认这将是最有益的。
答案 0 :(得分:0)
JavaScript前缀增量运算符不返回引用,它只返回一个值。分配给某个号码无效,这就是为什么它会抛出ReferenceError
。
你要么必须这样做:
_index = ++_index % LENGTH;
或者这个:
++_index;
_index %= LENGTH;
- 让 expr 成为评估 UnaryExpression 的结果。
- 让 oldValue 为ToNumber( GetValue( expr ))。
- ReturnIfAbrupt(属性oldValue )。
- 让 newValue 是将值
1
添加到 oldValue 的结果,使用与+
运算符相同的规则(参见12.7) 0.5)。- 让状态为PutValue( expr , newValue )。
- ReturnIfAbrupt(状态)。
- 返回 newValue 。
醇>