为什么我们不能递增 (++) 或递减 (--) 数字文字
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
),也不能使用递增或递减运算符改变它们的值。
例如,在下面的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
),也不能使用递增或递减运算符改变它们的值。