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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM