初學者指南:為什麼在 JavaScript 中先乘除後加減?
更新日期: 2024 年 10 月 17 日
在學習 JavaScript(以及大多數程式語言)時,你可能會發現數學運算符的執行順序與我們在數學課上學到的相同:先乘除,後加減。
這種運算順序稱為「運算子優先順序」(Operator Precedence)。
本篇文章將為新手詳細介紹為什麼會有這樣的規則,如何理解運算子的優先順序,以及如何正確地解讀和計算像 6 ÷ 2(1+2)
這樣的表達式。
什麼是運算子優先順序?
運算子優先順序是指在沒有括號的情況下,運算式中各個運算子被執行的順序。這個順序決定了複雜表達式是如何被計算的。
JavaScript 中的運算子優先順序
在 JavaScript 中,常見的運算子優先順序如下(從高到低):
- 括號
()
:最高優先級,先計算括號內的表達式。 - 指數
**
- 乘法
*
、除法/
、取餘%
- 加法
+
、減法-
為什麼先乘除後加減?
數學規則的延伸
「先乘除,後加減」的規則源自數學中的運算規則,稱為 BEDMAS/PEDMAS:
- B/P:Brackets/Parentheses(括號)
- E:Exponents(指數)
- D:Division(除法)
- M:Multiplication(乘法)
- A:Addition(加法)
- S:Subtraction(減法)
JavaScript 等程式語言延續了這一規則,以確保程式計算結果與數學計算一致。
運算子的結合性
- 左結合性:從左到右計算,例如加法、減法、乘法、除法。
- 右結合性:從右到左計算,例如賦值運算子
=
、指數運算子**
。
如何解讀 6 ÷ 2(1+2)
?
這個表達式經常引起爭議,因為不同的人可能會得到不同的答案。我們將按照 JavaScript 的運算子優先順序來解釋。
步驟解析
表達式:
6 ÷ 2 * (1 + 2)
步驟一:計算括號內的表達式
(1 + 2) = 3
表達式變為:
6 ÷ 2 * 3
步驟二:從左到右進行乘除計算
- 第一個運算:6 ÷ 2
6 ÷ 2 = 3
- 第二個運算:結果 * 3
3 * 3 = 9
最終結果:9
常見的錯誤解讀
有些人可能會將表達式解讀為:
6 ÷ [2 * (1 + 2)] = 6 ÷ [2 * 3] = 6 ÷ 6 = 1
解釋:
- 這種解讀將
2(1+2)
視為整體,認為應該先計算括號外的乘法。 - 然而,在 JavaScript 中,除法和乘法具有相同的優先級,按照從左到右的順序計算。
在 JavaScript 中計算
代碼示例:
let result = 6 / 2 * (1 + 2);
console.log(result); // 輸出:9
正確使用括號以避免歧義
為了避免運算過程中的歧義,建議在需要強調計算順序時,使用括號明確表示。
如果期望結果為 1
修改表達式:
6 ÷ [2 * (1 + 2)]
JavaScript 代碼:
let result = 6 / (2 * (1 + 2));
console.log(result); // 輸出:1
如果期望結果為 9
原始表達式已經得到結果 9,無需修改。
總結
- 運算子優先順序:JavaScript 中,乘法和除法的優先級高於加法和減法,按照從左到右的順序計算。
- 括號的重要性:使用括號可以明確運算順序,避免歧義。
延伸閱讀
- MDN Web Docs – 運算子優先順序 https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
- JavaScript 運算子和表達式 https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Guide/Expressions_and_Operators
結語
理解運算子優先順序是學習 JavaScript 的重要一環。
透過本篇文章,希望你能夠:
- 掌握基本的運算子優先順序:知道在沒有括號的情況下,應該按照什麼順序進行計算。
- 正確解讀複雜的表達式:避免因誤解運算順序而導致錯誤的結果。
- 運用括號來避免歧義:在程式中明確地表示計算順序,提高代碼的可讀性和可靠性。
記住,在程式設計中,清晰和精確比簡潔更為重要。當你不確定運算順序時,使用括號來消除任何可能的誤解。