有时候,你需要反复把一个变量加 1 或减 1。这可以方便地使用增量(++
)和递减( --
)运算符来完成。

你不能将自增和自减运算符直接应用于一个数字,只能为变量赋值一个新的更新值,而不是对该值进行操作。以下将返回错误:
3++; //错误
你只能增加一个现有的变量。
增加或减少一个数字 1 是最常见的数值操作之一。
因此,有专门的运算符来处理:
-
自增运算符
++
将变量增加 1:let counter = 2; counter++; // works the same as counter = counter + 1, but is shorter alert( counter ); // 3
自减运算符 --
将变量减少 1:
let counter = 2; counter--; // works the same as counter = counter - 1, but is shorter alert( counter ); // 1
自增运算符 ++
和自减运算符 --
可以放在变量的前面或后面。
这两个语句执行的是相同的操作:将 counter
增加 1。
有区别吗? 有,但只有在我们使用 ++
或 --
返回的值时才能看出来。
我们来澄清一下。正如我们知道的,所有运算符都会返回一个值,自增/自减也不例外。前缀形式返回新的值,而后缀形式返回旧的值(自增/自减之前的值)。
为了看到这个区别,下面是一个示例:
let counter = 1; let a = ++counter; // (*) alert(a); // 2
在行(*)中,前缀形式 ++counter
将 counter
增加 1,并返回新的值 2。所以,alert
显示的是 2。
现在,使用后缀形式:
let counter = 1; let a = counter++; // (*) changed ++counter to counter++ alert(a); // 1
在行(*)中,后缀形式 counter++
也会将 counter
增加 1,但返回的是旧的值(自增之前的值)。因此,alert
显示的是 1。
总结:
-
如果自增/自减的结果没有被使用,那么使用哪种形式是没有区别的:
let counter = 0; counter++; ++counter; alert( counter ); // 2, the lines above did the same
- 如果我们想增加一个值并立即使用运算符的结果,那么需要使用前缀形式:
let counter = 0; alert( ++counter ); // 1
- 如果我们想增加一个值,但使用它的前一个值,那么需要使用后缀形式:
let counter = 0; alert( counter++ ); // 0
自增/自减与其他运算符一起使用
自增运算符 ++
和自减运算符 --
也可以在表达式中使用。它们的优先级高于大多数其他算术运算。
例如:
let counter = 1; alert( 2 * ++counter ); // 4
与此对比:
let counter = 1; alert( 2 * counter++ ); // 2, because counter++ returns the "old" value
虽然从技术上来说是可以的,但这种写法通常会使代码变得不那么易读。一行代码做了多个操作——这不好。
在阅读代码时,快速的“纵向”浏览可能会忽略像 counter++
这样的内容,且不容易发现变量已经增加。
我们建议采用“一行代码 – 一项操作”的风格:
let counter = 1; alert( 2 * counter ); counter++;