增加Map.get()

时间:2016-04-25 08:18:00

标签: javascript ecmascript-6

尝试在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中的错误可能是?或者使用++运算符误解了语法上发生了什么?

2 个答案:

答案 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++);