我來告訴你怎麼計算i++ + ++i + i++以及為什麼i++和++i區別這麼大?
阿新 • • 發佈:2019-01-30
先來看原理:
- 我們知道,++作為後置遞增時,優先順序為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計算應該是沒問題了!