1. 程式人生 > >我來告訴你怎麼計算i++ + ++i + i++以及為什麼i++和++i區別這麼大?

我來告訴你怎麼計算i++ + ++i + i++以及為什麼i++和++i區別這麼大?

先來看原理:

  • 我們知道,++作為後置遞增時,優先順序為16,而作為前置遞增時,優先順序為15
  • =作為賦值運算子時,優先順序為3
  • 所以,++會優先於=而執行
結論:

當運算子在運算元之前,稱為前增量運算子,它對運算元進行增量操作,並返回計算後的值{var i=1;j=++i;(實際上j=i+1)}

當運算子在運算元之後,稱為後增量運算子,它對運算元進行增量操作,但返回未做增量計算的值{var i=1;j=i++;(實際上j=i)}

i++的結果i=i+1; (i++)這個表示式的值是i(未做增量計算的值

++i的結果i=i+1; (++i)這個表示式的值是i+1(計算後的值

口決:

i++ :先引用後增加

i++  :先在i所在的表示式中使用i的當前值,後讓i加1
++i  :先增加後引用

++i :讓i先加1,然後在i所在的表示式中使用i的新值

例:

var i=1,j=i++;console.log(i);console.log(j);返回i是2,j是1,j返回未做增量計算的值

var i=2,j=i++;返回i選先賦值j再自增,所以j=i=2;  i=i+1=3;

var i=1,j=++i;console.log(i);console.log(j);返回i和j都是2,j返回計算後的值

var i=2, j=++i; 返回i先運算+1再賦值給J,所以J=(2+1)  i=1+i=3;

再例如:

var i=2;
j=i++ + ++i;
//j=2 + (3+1)
//i=(2+1) + 再把前面的3轉給++i,所以i結果為4
結果j是6;i結果是4

最後再來個例子:

var i=2;
j=i++ + ++i + i++;//如果寫成j=i+++++i+i++;也要能分析出來
//計算j的步驟:
//(先i賦值給j再自增所以在這裡j=2,i=3); 
//+(這裡i先自增i=i+1=3+1=4”注意i到這裡因前面i++自增過變成3,再++i變成4“,再把i=4賦值給j,所以這裡的j=4,i=4)
//+(這裡i先賦值給j所以把上一步的i=4賦值給j,再自增i=4+1,所以這裡i=5,j=4)
//所以j到最後一步變成 J=2+4+4=10;
//所以i到最後一步變成i=5

當然,- - i 與 i - -也是一樣的原理,這裡就不再舉例說明了

相信經過上面的計算,以後對於i++和++i計算應該是沒問題了!