---
id: bd7158d8c442eddfaeb5bd17
title: 構建一個 JavaScript 計算器
challengeType: 3
forumTopicId: 301371
dashedName: build-a-javascript-calculator
---

# --description--

**目標：** 在 [CodePen.io](https://codepen.io) 上實現一個功能類似 <https://codepen.io/freeCodeCamp/full/wgGVVX> 的 App。

在滿足以下 [需求](https://en.wikipedia.org/wiki/User_story) 並能通過所有測試的前提下， 賦予它你自己的個人風格。

可以使用 HTML、JavaScript、CSS、Bootstrap、SASS、React、Redux、jQuery 來完成這個挑戰。 但鑑於這個章節的學習內容與前端框架相關，推薦使用一款前端框架（比如 React）來完成這個挑戰；不推薦使用前面沒有提到的技術，否則風險自負。 不推薦使用前面沒有提到的技術，否則風險自擔。 我們有計劃新增其他前端框架課程，例如 Angular 和 Vue，不過目前還沒有這些內容。 我們會接受並嘗試修復你在使用推薦技術棧創建項目時報告的問題。 編碼愉快！

**需求 1：** 計算器應該包含一個具有 `id="equals"` 屬性的可以點擊的元素，元素的文本內容爲 `=`（等於符號）。

**需求 2：** 計算器應該包含 10 個具有如下 id 屬性的可以點擊的元素，每個元素的文本內容對應 0-9 的數字：`id="zero"`、`id="one"`、`id="two"`、`id="three"`、`id="four"`、`id="five"`、`id="six"`、`id="seven"`、`id="eight"`、`id="nine"`。

**需求 3：** 計算器應該包含四個可以點擊的元素，文本內容對應4個主要數學運算符，且應具有如下 id 屬性： `id="add"`, `id="subtract"`, `id="multiply"`, `id="divide"`。

**需求 4：** 計算器應該包含一個可點擊的 `.`（小數點）符號，對應的 `id="decimal"`。

**需求 5：** 計算器應該包含一個具有 `id="clear"` 屬性的可以點擊的元素。

**需求 6：** 我的計算器應該包含一個用於展示數值的元素，這個元素具有 `id="display"` 屬性。

**需求 7：** 在任何時候按下 `clear` 鍵，都會清空輸入和輸出的數值並且使計算器回到初始狀態；此時在 id 爲 `display` 的元素中應該顯示數字 0。

**需求 8：** 在輸入數字的同時，應該能看到輸入的數字展示在 id 爲 `display` 的元素中。

**需求 9：** 應該可以在任意順序下對一串任意長度的數字執行加、減、乘、除操作，並且當按下 `=` 時，正確答案應該顯示在 id 爲 `display` 的元素中。

**需求 10：** 在輸入數字的同時，計算器應該不允許一個數字以多個零開頭。

**需求 11：** 當點擊小數點元素時，當前展示的數值後面應該添加一個 `.` 符號；數字中不允許出現兩個 `.` 符號。

**需求 12：** 我可以對包含小數點的數字執行任何四則運算（`+`、`-`、`*`、`/`）。

**需求 13：** 如果連續鍵入了兩個及以上的運算符，應該執行最後一次鍵入的運算符（負數（`-`）運算符除外）。 例如，如果輸入 `5 + * 7 =`，結果應該是 `35` （等同於 `5 * 7`）；如果輸入 `5 * - 5 =`，結果應該是 `-25`（等同於 `5 * (-5)`）。

**需求 14：** 如果在按下 `=` 符號後繼續按一個運算符，則應該在上一次計算結果的基礎上進行新的計算。

**需求 15：** 當需要四捨五入時，計算器可以處理結果的精度（注意：處理到多少位沒有一個準確的標準，但是至少能處理類似 `2 / 7` 這樣的計算，使之至少有 4 位小數的精度）。

**注意計算器的邏輯：** 應當注意的是，計算器輸入邏輯主要有兩種思路：<dfn>立即執行邏輯</dfn> 和 <dfn>公式邏輯</dfn>。 我們的示例使用公式邏輯並遵守運算優先順序，而立即執行則不然。 兩者都是可以接受的，但請注意，根據你的選擇，你的計算器對於某些算式可能會得到與示例不同的計算結果（參見下面的示例）。 只要數學計算可以通過其它現實中計算器的驗證，那麼代碼就是合理的。

**示例：** `3 + 5 x 6 - 2 / 4 =`

-   **立即執行邏輯：** `11.5`
-   **公式／表達式邏輯：** `32.5`

你可以<a href='https://codepen.io/pen?template=MJjpwO' target='_blank' rel='nofollow'>使用這個 CodePen 模板</a>，點擊 `Save` 即可創建你自己的項目。 或者可以在任何喜歡的環境中使用以下 CDN 鏈接來運行測試：`https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js`。

當你完成了本項目，並且該項目所有測試運行通過，請提交項目的 URL。

# --solutions--

```js
// solution required
```
