0%

递增递减操作符

写在前面

函数表达式这一章,看到闭包,又卡壳了,懵逼了。。。去看了《你不知道的JavaScript》,查了资料,感觉稍微理解了一点,但是这个概念对我来说还是不清晰啊。。。我能怎么办,我也对自己的智商很无奈啊。。。算了,先搞简单的吧。操作符够简单了吧,但是递增递减操作符我还真就容易出错,今天看的时候还出错了。。。所以只能说还是没有完全理解,我觉得一件事只有自己能表述清楚了才是真的理解了。本着这个原则,虽然是基础简单的东西,但既然自己这么容易出错,就记录一下吧。以后有这些小的知识点容易错、记不住的也都记录一下吧,不能眼高手低。今天碎碎念的废话有点多啊~

开始了

递增和递减操作符分为前置和后置的两种,前置的长这样:--num++num,后置的长这样:num--num++

让我们来看一个栗子:

1
2
3
4
5
6
var a = 1,
b = 2;
console.log(a++); // 1
console.log(a); // 2
console.log(++b); // 3
console.log(b); // 3

先下结论:

  • 不管是前置还是后置,递增/递减操作最后都会改变当前这个变量的值,只是什么时候改变的问题
  • 前置操作:变量的值是在其所在的整个语句执行前改变的
  • 后置操作:变量的值是在其所在的整个语句执行后改变的

这样,问题的关键就是怎么理解变量所在的整个语句了。

上面的例子中,a变量所在的整个语句就是console.log(a++);,就是说问题的关键就是看变量的改变是在打印变量a之前改变还是在变量a之后改变

我们把上面的例子等价转换一下:

1
2
3
4
5
6
7
8
9
var a = 1,
b = 2;
console.log(a); // 1
a = a + 1; // a++
console.log(a); // 2

b = b + 1; // ++b
console.log(b); // 3
console.log(b); // 3

可以看到前置操作是在变量改变之后再执行的打印变量操作,打印的结果自然是变量递增之后的值

后置操作是先打印了变量,然后变量的值才改变的,打印的结果自然是变量改变前的值。

再看一下书上的栗子:

1
2
3
4
var num1 = 2;
var num2 = 20;
var num3 = --num1 + num2; // 21
var num4 = num1 + num2; // 21
1
2
3
4
var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2; // 22
var num4 = num1 + num2; // 21

上面的例子分别等价于:

1
2
3
4
5
var num1 = 2;
var num2 = 20;
num1 = num1 - 1; // --num1,在前
var num3 = num1 + num2; // 21
var num4 = num1 + num2; // 21
1
2
3
4
5
var num1 = 2;
var num2 = 20;
var num3 = num1 + num2; // 22
num1 = num1 - 1; // num1--,在后
var num4 = num1 + num2; // 21

观察上面的等价处理后的示例代码,其实不同之处就是这一句num1 = num1 - 1;的执行位置不同而已,其它代码完全相同。这个时候再看前面下的结论是不是就更清晰了呢:

  • 前置操作:变量的值是在其所在的整个语句执行前改变的
  • 后置操作:变量的值是在其所在的整个语句执行后改变的

拜了个拜~