JavaScript運算符:遞增遞減運算符前置和后置的區別


從兩段代碼說起

var num1 = 2;
var num2 = 20;
var num3 = --num1 + num2;
var num4 = num1 + num2;
console.log(num1 +'-' + num2 +'-'+ num3 +'-' + num4)

將四個數分別打印是多少?

var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2;
var num4 = num1 + num2;
console.log(num1 +'-' + num2 +'-'+ num3 +'-' + num4)

這段代碼運行之后將四個數分別打印又是多少?

如果你能果斷地說出答案並且能自圓其說,那也就沒必要繼續看下去了。

遞增運算符和遞減運算符

我們都知道,JavaScript中的遞增運算符是 ++,遞減運算符是 --。簡單來說,遞增運算符就是將變量+1,遞減運算符就是讓變量-1,可是前置和后置結果是不一樣的,也是很容易混淆的。

前置型遞增(遞減)

前置型簡單理解就是先計算再賦值。例如

var a = 1;
var b = ++a;
console.log(a);  //2
console.log(b);  //2

上面的表達式也可以理解為:

var a = 1;
a = a + 1;
var b = a;

后置型遞增(遞減)

后置型簡單理解就是先賦值再計算。例如

var a = 1;
var b = a++;
console.log(a);  //2
console.log(b);  //1

上面的表達式也可以理解為:

var a = 1;
var i = a;
a = a + 1;
var b = i;

原理

前置和后置型運算符之所以有上面的區別,是因為運算符的優先級。在各運算符按照優先級的不同由高到低排列順序中:

  • 后置型遞增(遞減)運算符的優先級是17
  • 前置型遞增(遞減)運算符的優先級是16
  • 賦值運算符=的優先級是3

所以,++和--會優先於=執行。但是這邊我自己也還有個疑問,前置型的還可以用優先級解釋,但是后置型的怎么解釋呢,講道理它也比=的優先級高啊,這個我還有點疑問。

然后根據MDN上對遞增(++)的解釋:

  • 如果后置(postfix)使用,即運算符位於操作數的后面(如 x++),那么將會在遞增前返回數值。
  • 如果前置(prefix)使用,即運算符位於操作數的前面(如 ++x),那么將會在遞增后返回數值。

根據這個解釋,在例子中

var a = 1;
console.log(a++)  //1

a++實際上是等於a遞增之前的數值的,也就是1,這個在開發中容易被忽略,要謹記。

總結

回到最上面的代碼,第一段代碼分別會打印:1-20-21-21,第二段代碼會打印:1-20-22-21

我們開發中需要記住的是:前置型是先計算再返回數值,后置型是先返回數值再計算。

參考文章


免責聲明!

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



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