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