例如,在下面的JavaScript代码中,为什么我们在使用变量时不会出错,但是当使用数字文字时,我得到一个错误(在节点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以前value(所以x / y现在指向3,而不是2)。但是,你不能将2增加为前一个值+1,然后让它指向文字3. 2将永远为2,2将永远不会指向3。
我的推理是否正确?
答案 0 :(得分:3)
字面值是常量,增量/减量会分别尝试更改其参数。但不能改变常数值。
像编码
一样2 = 2 + 1;
答案 1 :(得分:0)
增量/减量运算符的参数必须是左值 - 实际上,它必须是可以为其赋值的表达式。这可以是变量,也可以是某些类型的简单结构化表达式(如array[0]++
或object.foo++
)。
常量不是左值。您不能为它们分配值(3 = abc
),也不能使用递增或递减运算符来改变它们的值。