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

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),也不能使用递增或递减运算符改变它们的值。

【讨论】:

以上是关于为啥我们不能递增 (++) 或递减 (--) 数字文字的主要内容,如果未能解决你的问题,请参考以下文章

递增和递减数字

js验证连续两位数字递增或递减和连续三位数字相同

『8.21 模拟赛』Victory

为啥递增和递减是一元运算

递增递减运算符

为啥我们不能访问信号量