为啥我们不能递增 (++) 或递减 (--) 数字文字
Posted
技术标签:
【中文标题】为啥我们不能递增 (++) 或递减 (--) 数字文字【英文标题】:Why can't we increment (++) or decrement (--) number literals为什么我们不能递增 (++) 或递减 (--) 数字文字 【发布时间】:2017-08-12 06:48:24 【问题描述】:例如,在下面的 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值(所以 x/y 现在指向 3,而不是 2)。但是,您不能将 2 增加到其先前值的 +1,然后让它指向文字 3。2 将永远是 2,2 永远不会指向 3。
我的推理是否正确?
【问题讨论】:
console.log(x++)
与 console.log(x); x=x+1
相同。将2
替换为x
,第二个语句(2=2+1
) 尝试将2+1
存储在非变量(2
) 中。 console.log(++x)
与 x=x+1; console.log(x)
相同。 --
也是如此。
++
和 --
是对变量的操作。它们递增或递减并设置值。你不能改变一个常数。
其实在python等一些语言中,预增和预减都是对数字字面量的有效操作。
【参考方案1】:
文字是常量,递增/递减会尝试分别改变它的参数。但常量值不能更改。
这就像编码类似的东西一样
2 = 2 + 1;
【讨论】:
【参考方案2】:自增/自减运算符的参数必须是一个左值——本质上,它必须是一个可以赋值的表达式。这可以是变量,也可以是某些类型的简单结构化表达式(例如 array[0]++
或 object.foo++
)。
常量不是左值。您不能为它们赋值 (3 = abc
),也不能使用递增或递减运算符改变它们的值。
【讨论】:
以上是关于为啥我们不能递增 (++) 或递减 (--) 数字文字的主要内容,如果未能解决你的问题,请参考以下文章