上一篇我們認識了 JavaScript 的數字型態,知道怎麼寫出數字值、以及 JavaScript 怎麼用 64 位元來儲存它們。
但光有數字還不夠,我們需要拿這些數字來「做事」——加、減、乘、除。
這就是算術運算。
這篇文章會帶你了解:JavaScript 的算術怎麼寫、運算子是什麼、以及當多個運算同時出現時,JavaScript 會怎麼決定先算哪個。
什麼是算術運算?
算術運算就是拿兩個數字值來計算,然後產生一個新的數字值。
在 JavaScript 裡,寫法跟你在數學課看到的幾乎一樣:
100 + 4 * 11這行程式碼裡有兩個符號:+ 和 *。
什麼是運算子(Operator)?
這些 +、* 符號的作用,就是告訴 JavaScript:「請對旁邊的兩個數字做某種計算」。
+ 告訴 JavaScript 要做加法,* 告訴 JavaScript 要做乘法。
這類符號有一個專門的名稱,叫做運算子(Operator)。
你可能會覺得奇怪:「運算」不是應該叫 Calculate 嗎,怎麼叫 Operator?
你可以把它想成以前電信局的「接線生(Operator)」。
接線生的工作是:拿起左邊的一條線,連結到右邊的一個插孔,讓通訊發生。
程式裡的 + 也是一樣的角色——它把左邊的 100 和右邊的 4 拿起來,操作(Operate)它們,最後連結出一個結果 104。
所以 Operator 的意思比較接近「把東西拿起來處理並連結的中間人」,中文習慣翻譯成「運算子」。
這篇文章介紹的 +、-、*、/、% 都是專門處理數字計算的運算子,但運算子不是只有這些。
在後面的文章裡,你還會碰到用來比較大小的運算子、用來處理文字的運算子等等。
只要記住:運算子就是那個把旁邊的值拿起來處理、然後產生新結果的符號,不管它處理的是數字、文字還是其他東西。
運算子的用法很固定:放在兩個資料值之間,JavaScript 就會對這兩個值進行計算,然後產生一個新的值。
4 * 11 // 把 4 和 11 相乘,產生新的值 44
100 + 44 // 把 100 和 44 相加,產生新的值 144運算子的優先序:JavaScript 先算哪個?
回頭看一下這行程式碼:
100 + 4 * 11這裡有一個問題:JavaScript 會怎麼算?
是先算 100 + 4 得到 104,再乘以 11?
還是先算 4 * 11 得到 44,再加上 100?
答案是:先乘後加。
但 JavaScript 是怎麼知道要先算乘法的?
因為每個運算子都有一個內建的「優先序(Precedence)」,用來決定誰先被計算。
優先序高的運算子會先被計算,優先序低的就等前面算完才輪到它。
在 JavaScript 裡,乘法 * 的優先序比加法 + 高,所以會先算 4 * 11 得到 44,再算 100 + 44,最後得到 144。
這跟你在數學課學到的「先乘除後加減」是一樣的規則。
完整的優先序規則
JavaScript 的算術運算子有以下幾種:
優先序的規則是這樣的:
*、/、% 的優先序相同,都比 + 和 - 高。
也就是說,JavaScript 會先算乘法、除法、餘數,再算加法和減法。
那如果一行程式碼裡,出現了好幾個優先序相同的運算子呢?
比如 1 - 2 + 1,- 和 + 的優先序一樣高,JavaScript 沒辦法用優先序來決定先算哪個。
這時候 JavaScript 有一條內建的規則:從左邊開始,依序往右計算:
1 - 2 + 1
// 先算 1 - 2 = -1
// 再算 -1 + 1 = 0不確定順序?加括號就對了
不過,你不需要把這些規則全部背起來。
如果你想讓某個運算先算,只要加上括號就好:
(100 + 4) * 11 // 先算括號裡的 100 + 4 = 104,再乘以 11,得到 1144括號裡的運算一定會先被執行,這點也跟數學一模一樣。
如果不確定運算順序,加上括號就好,這樣不管是你自己還是別人讀你的程式碼,都能一眼看出來先算什麼。
餘數運算子(%)是什麼?
在上面的表格裡,你可能注意到一個不太熟悉的運算子:%。
這不是「百分比」的意思,在 JavaScript 裡,% 是餘數運算子,也常被稱為 Mod 運算子(Modulo)。
你可能會好奇:Modulo 這個詞跟「餘數」有什麼關係?
在英文裡,Mod- 這個詞根代表「測量(Measure)」。
想像你手上有一條長繩子,然後你拿一把固定長度的尺去量它。
你能量出完整的一段、兩段、三段……但到最後,總會剩下一小截「量不滿一整把尺」的繩子。
那一小截,就是 Modulo 的結果——測量之後剩下的零頭。
它的功能是:算出兩個數字相除之後的餘數。
314 % 100 // 314 ÷ 100 = 3 餘 14,所以結果是 14
144 % 12 // 144 ÷ 12 = 12 餘 0,所以結果是 0換句話說,X % Y 就是在問:「X 除以 Y 之後,剩下多少?」
舉個生活中的例子:如果你有 314 元,要買每個 100 元的東西,買完之後你手上還剩多少錢?
314 % 100 // 剩 14 元餘數運算子的優先序跟 * 和 / 相同,都比 + 和 - 高。
小結
讓我們整理一下這篇文章的重點:
- 算術運算就是拿兩個數字值計算,產生一個新的數字值。
+、-、*、/、%這些符號叫做運算子(Operator),放在兩個數字之間就能進行運算。- 運算子有優先序:
*、/、%會先算,+、-後算,跟數學規則一樣。 - 優先序相同的運算子,從左到右依序計算。
- 不確定順序的時候,加括號就對了。
%是餘數運算子,用來算「除完之後剩多少」。