尝试在Chrome(50.0.2661.86)的控制台中增加从地图获取的值时出现以下错误:
Uncaught ReferenceError: Invalid left-hand side expression in postfix operation(…)
类似于Node(4.4.3):
ReferenceError: Invalid left-hand side expression in postfix operation
at repl:1:3
at REPLServer.defaultEval (repl.js:262:27)
at bound (domain.js:287:14)
at REPLServer.runBound [as eval] (domain.js:300:12)
at REPLServer.<anonymous> (repl.js:431:12)
at emitOne (events.js:82:20)
at REPLServer.emit (events.js:169:7)
at REPLServer.Interface._onLine (readline.js:211:10)
at REPLServer.Interface._line (readline.js:550:8)
at REPLServer.Interface._ttyWrite (readline.js:827:14)
违规代码是:
var m = new Map()
m.set(1, 0)
m.get(1)
var n = m.get(1)++ // Uncaught ReferenceError: Invalid left-hand side expression in postfix operation(…)
以下内容也失败了:
var n = ++m.get(1)
var n = ++(m.get(1))
V8中的错误可能是?或者使用++
运算符误解了语法上发生了什么?
答案 0 :(得分:4)
我不是JS评估方案的专家,但是我试着解释一下。
在JS中,(1)++
无效;你不能改变一个值。您可以做的是将值归因更改为名称:
var a = 1;
a++;
在这种情况下,1
的值不会改变; a
现在指向不同的值会发生什么变化。
同样,你不能增加.get()
返回的值;您需要先将其转换为命名表达式,然后才能更改 。
在C ++术语中,我们会说++
需要左值,但函数返回是 rvalue 。
答案 1 :(得分:3)
您无法为函数调用分配值。那就像说
m.get(1) = m.get(1) + 1
您需要将其拆分为两个语句:
const n = m.get(1) + 1;
m.set(1, n);
或者:
const n = m.get(1);
m.set(1, n++);