目錄
- 引言
- ++和--在數(shù)學(xué)運算中的計算規(guī)則
- ++和--在變量引用時的計算規(guī)則
- ++和--的數(shù)據(jù)轉(zhuǎn)換應(yīng)用
- 結(jié)語
引言
???????對于接觸JS時間不長的前端來說,剛開始要實現(xiàn)諸如輪播圖,選項卡等小模塊時,肯定會用到index索引來實現(xiàn)。而這其中很大一部分又會使用++(自加)、--(自減),所以清楚的知道++(自加)、--(自減)的計算模式,可以在運用時減少錯誤。本文將從數(shù)學(xué)運算、變量引用、數(shù)據(jù)轉(zhuǎn)換3個方面,對++(自加)、--(自減)進行一個詳細的說明,力求達到一個在通讀全文后,明確++(自加)、--(自減)應(yīng)用方式的效果。
一、++和--在數(shù)學(xué)運算中的計算規(guī)則
???????老規(guī)矩,先上代碼:
let a = 1,
b = 1;
let num1 = a++ + b++, //num1執(zhí)行前a=1,b=1,num1執(zhí)行后a=2,b=2
num2 = a++ + ++b, //num2執(zhí)行前a=2,b=2,num2執(zhí)行完后a=3,b=3
num3 = ++a + b++, //num3執(zhí)行前a=3,b=3,num3執(zhí)行完后a=4,b=4
num4 = ++a + ++b; //num4執(zhí)行前a=4,b=4,num4執(zhí)行完后a=5,b=5
console.log(num1); //結(jié)果為2,步驟分解: a + b(1 + 1)=> a++(2) => b++(2) => a=2,b=2;
console.log(num2); //結(jié)果為5,步驟分解: a + (++b)(2 + 3) => a++(3) => a=3,b=3;
console.log(num3); //結(jié)果為7,步驟分解: (++a) + b(4 + 3) => b++(4) => a=4,b=4;
console.log(num4); //結(jié)果為10,步驟分解: (++a) + (++b)(5 + 5) => a=5,b=5;
???????通過以上代碼,可以總結(jié)出++和--在數(shù)學(xué)運算出的計算規(guī)則如下(加減乘除沒區(qū)別):
- 當(dāng)++、--寫在變量前時,數(shù)學(xué)計算時,引用的是++、--未執(zhí)行的變量值;
- 當(dāng)++、--寫在變量后時,數(shù)學(xué)計算時,引用的是++、--執(zhí)行后的變量值;
???????通過以上的理解,就不難看出,num1得到的求和結(jié)果實際上就是a + b,而num2實際上是a + (++b),num3是(++a) + b,num4是(++a) + (++b),但是求和歸求和,++、--只是沒在求和結(jié)果中執(zhí)行,實際上變量的++、--都是執(zhí)行了的,這一點要明確。
二、++和--在變量引用時的計算規(guī)則
???????上代碼:
let num1 = 0,
num2 = 0;
let arr = [0, 1, 2, 3, 4, 5, 6];
console.log(arr[num1++]); // 0 num1=1
console.log(arr[++num2]) // 1 num2=1
???????通過以上代碼,不難看出,當(dāng)在變量引用時執(zhí)行++、--,與數(shù)學(xué)運算有相似的規(guī)律??偨Y(jié)起來就是一句話——++、--在變量前,引用++、--執(zhí)行后的變量值;++、--在變量后,引用當(dāng)前變量值(即執(zhí)行++、--前的值)。
三、++和--的數(shù)據(jù)轉(zhuǎn)換應(yīng)用
???????上代碼:
let a = true;
let b = false;
let c = "a";
console.log(++a); //2
console.log(b++); //0
console.log(c++); //NaN
???????總結(jié)——對非Number類型的數(shù)據(jù),應(yīng)用++、--,相當(dāng)于執(zhí)行了Number()方法。如果轉(zhuǎn)換后是number類型,則按上邊的規(guī)則執(zhí)行++和--,如果轉(zhuǎn)換后不是number類型,則不執(zhí)行++和--。輸出NaN。不能直接進行類似++true的操作,必須通過聲明變量值為true或false,然后再++、--。
結(jié)語
???????越是簡單常用的技巧,可能越容易被人忘記它的其他方面。保持一顆藍翔畢業(yè)的心,挖掘所有東西~
???????本文同時發(fā)布于我的博客園https://www.cnblogs.com/keepStudying/p/9743457.html
???????轉(zhuǎn)載請注明出處