在javascript的语法里,我们把只操作一个值的操作符称为一元操作符。这里我将针对一元操作符里面的递增操作符和递减操作符做一下详细介绍。
1.前缀操作符
顾名思义,前缀操作符就是位于要操作的变量前头。前缀递增操作符会给数值加1,把两个加号放到变量前面即可:
let age = 29;
++age;
在这个例子中,前缀递增操作把age的值变成了30(给之前的值29加1)。因此,它实际上等于如下表达式:
let age = 29;
age = age + 1;
前缀递减也类似,只不过是从一个数值减1。使用前缀递减操作符,只需要把两个减号放在变量前面即可:
let age = 29;
--age;
执行该操作之后,age变量的值变成了28(从29减1) 。
所以我们得出结论:无论是前缀递增还是前缀递减,变量的值都会在语句被求值之前改变。例如下面的例子:
let age = 29;
let anotherAge = --age + 2'
console.log(age) // 28
console.log(anotherAge) // 30
在这个例子中,变量anotherAge首先以age见1后的值再加2进行初始化。因为递减操作县发生,所以age的值变成28,然后再加2,结果是30.
前缀递增和递减在语句中的优先级是相等的,因此会从左到右依次求值,比如:
let num1 = 2;
let num2 = 20;
let num3 = --num1 + num2;
let num4 = num1 + num2;
console.log(num3) // 21
console.log(num4) // 21
这里,num3等于21是因为num1先减1之后才加num2.变量num4也是21,是因为加法使用的也是递减之后的值。
2.后缀操作符
递增和递减的后缀操作符和前缀的语法一样,只不过要放在变量后面。
后缀操作符和前缀操作符的区别在于:后缀递增和递减在语句被求值之后才发生。
在某些情况下,这种差异没什么影响,比如:
let age = 29;
++age;
console.log(age) // 30
可是,在跟其他操作混合时,差异就会变得明显,比如:
let num1 = 2;
let num2 = 20;
let num3 = num1-- + num2;
let num4 = num1 + num2;
console.log(num3) // 22
console.log(num4) // 21
通过这个例子相信你已经对前缀操作符和后缀操作符有了更深刻的理解了,不过前缀操作符和后缀操作符还有其他用处,比如:操作字符串、布尔值、浮点值、对象。
当然知识的诞生肯定是有缘由的,这里我是参考了来自李松峰大师翻译的【美】马特·弗里斯比 (Matt Frisble)大师的名著《JavaScript高级程序设计(第四版)》,目前还在处于持续阅读阶段,有兴趣的童鞋可以私聊我,可以一起学习一起进步!