印象中記得以前學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的個人總結,雖然可以區分出他們之間的區別了,不過在運算時最好還是少用,因為對於代碼理解不是特別友好,盡量還是用簡明一點的表達式。