为什么我们不能递增 (++) 或递减 (--) 数字文字

Why can't we increment (++) or decrement (--) number literals

例如,在下面的JavaScript代码中,为什么我们在使用变量时没有报错,但在使用数字字面量时却报错(运行 on node v6. 9.5)?

let x = 2;
console.log(x++); //2

let y = 2;
console.log(++y); //3

console.log(2++); //ReferenceError: Invalid left-hand side expression in postfix operation
console.log(++2); //ReferenceError: Invalid left-hand side expression in prefix operation

我的理解是这行不通,因为您不能改变文字 2。在前面的示例中,您返回了 x 或 y(递增之前或之后),所以它现在等于 +1它以前的值(所以 x/ y 现在指向 3,而不是 2)。但是,您不能将 2 递增为其先前值 +1,然后让它指向文字 3。2 将始终为 2,2 永远不会指向 3。

我的推理正确吗?

文字是常量,increment/decrement会尝试分别改变它的参数。但常量值无法更改。

这就像编码一样

2 = 2 + 1;

increment/decrement 运算符的参数必须是 lvalue —— 本质上,它必须是一个可以赋值的表达式。这可以是变量,也可以是某些类型的简单结构化表达式(如 array[0]++object.foo++)。

常量不是左值。您不能为它们赋值 (3 = abc),也不能使用递增或递减运算符改变它们的值。