关于js中的i++和++i

  印象中记得以前学C语言的时候,对于i++和++i,有一个是先增,有一个是后增,以至于我老觉得在for循环体里对某个变量进行+1的时候,总是不敢用i++和++i,怕会出现我以为它加了1,但实际上它是在下一次循环里才加了1的这种情况,所以总是用i+=1。今天想起来这个事,所以特地抽时间实践了一下,才发现自己想错了,记岔了,哈哈。下面记录一下i++和++i的区别。

  Q1:在循环体里对i变量进行++i和i++,有什么区别?

  A1:来实践一下

1 let a = 1
2 for (let i = 0; i < 1; i++) {
3     console.log(a)  // 输出1
4     a++
5     console.log(a)   // 输出2
6 }
1 let a = 1
2 for (let i = 0; i < 1; i++) {
3     console.log(a)  // 输出1
4     ++a
5     console.log(a)  // 输出2
6 }

   由上面两个小事例可以发现,i++和++i在循环体里使用的效果是一样的,都能立即对变量进行+1,而无需到下一次循环时才生效,所以我之前担心的点,完全是瞎担心~同样的,因为这样,所以其实在循环条件里用i++或是++i,都不影响效果,用哪个就看个人喜欢啦。

 1 for (let i = 0; i < 3; i++) {
 2     console.log(i)
 3 }
 4 // 0
 5 // 1
 6 // 2
1 for (let i = 0; i < 3; ++i) {
2     console.log(i)
3 }
4 // 0
5 // 1
6 // 2

 

  Q2:i++和++i在什么情况下会有差别?

  A2:在用于运算的时候会有偏差!来看以下例子:

1 let a = 1
2 let b = ++a
3 console.log(a)    // 输出2
4 console.log(b)    // 输出2
1 let a = 1
2 let b = a++
3 console.log(a)    // 输出2
4 console.log(b)    // 输出1

   由以上例子可以看出,对于进行自增的变量来说,是没有区别的,但是对于被赋值的变量来说,一个是成功赋值,另一个却貌似只赋值到了自增之前的数值。

  出现这种情况,是因为在js中++这个操作符在变量前面时,会先对变量进行自增,然后再将自增后的结果赋值给等号左边的变量;当++操作符在变量后面时,会先将变量目前的值赋值给等号左边的变量,然后再进行自增,总而言之一句话:

    ++在前先自增,++在后先赋值

 

  Q3:i和++之间可以有空格吗?

  A3:我们来做三个实验:① i ++; ② i+ +; ③ i + +

1 let i = 1
2 i ++
3 console.log(i)     // 输出2
1 let i = 1
2 i+ +
3 console.log(i)    // 输出1,并且输出了一个NaN
1 let i = 1
2 i + +
3 console.log(i)    // 输出1,并且输出了一个NaN

  由以上实验可得知,++作为一个操作符,中间是不能存在空格的,但是与被操作的变量之间是可以存在空格的,这一点和其他运算符没有区别。

 

  Q4:出现三个+号怎么办?

  A4:来实践一下

1 let a = 1
2 let b = 0
3 let c = a +++ b
4 console.log(c)    // 输出1
5 console.log(a)    // 输出2
6 console.log(b)    // 输出0

   由以上代码可得知,a是进行了自增的,b没有变,所以当三个+连接出现时,其实是会被解析成 let c = a++  +b,若想得到不一样的结果,需要我们给+之间增加空格,来表达不一样的意思,如下:

1 let a = 1
2 let b = 0
3 let c = a + ++ b
4 console.log(c)    // 输出2
5 console.log(a)    // 输出1
6 console.log(b)    // 输出1

 

   结束:

  以上就是关于i++和++i的个人总结,虽然可以区分出他们之间的区别了,不过在运算时最好还是少用,因为对于代码理解不是特别友好,尽量还是用简明一点的表达式。

 

posted @ 2019-07-04 18:25  吃火鸡的馒头  阅读(2748)  评论(1编辑  收藏  举报