JavaScript 語法基礎 – 註解(Comments)
簡介
在任何程式語言中,註解都是協助開發者溝通、說明與維護程式碼的關鍵工具。對於 JavaScript 這類在瀏覽器與伺服器端皆廣泛使用的腳本語言而言,良好的註解習慣不僅能讓自己在日後回顧程式時快速理解邏輯,也能幫助團隊成員在協作時減少誤解與錯誤。
此外,註解本身不會被執行環境解析成指令,不會影響執行效能;但若使用不當,卻可能造成程式碼雜亂、難以閱讀,甚至在壓縮(minify)階段留下不必要的字元。因此,掌握正確的註解語法與最佳實踐,是每位 JavaScript 開發者必備的基礎能力。
核心概念
1. 註解的兩種基本語法
JavaScript 只提供兩種註解形式:
| 形式 | 語法 | 用途 |
|---|---|---|
| 單行註解 | // 這是一行註解 |
用於說明單行程式或暫時停用程式碼 |
| 多行註解 | /* 這是多行註解 */ |
用於說明較長段落、文件說明或大段程式碼暫停執行 |
單行註解範例
// 取得使用者輸入的名稱
let userName = prompt('請輸入您的名字:');
多行註解範例
/*
以下函式會將傳入的字串反轉。
1. 先將字串轉成陣列
2. 使用陣列的 reverse 方法
3. 再合併回字串
*/
function reverseString(str) {
return str.split('').reverse().join('');
}
2. 註解的實務寫法
(1) 說明**「為什麼」而非「做了什麼」**
程式碼本身已能表現「做了什麼」,註解應聚焦在決策背後的原因。
// 使用位元運算檢查是否為偶數(比取餘數快)
if ((num & 1) === 0) {
// ...
}
(2) 使用 TODO / FIXME 標記未完成或需修正的地方
// TODO: 待加入錯誤處理機制
fetch(url)
.then(res => res.json())
.catch(err => console.error(err));
(3) 為函式、類別加上 JSDoc 標註,提升 IDE 補全與文件生成能力
/**
* 計算兩個數字的總和。
* @param {number} a - 第一個加數
* @param {number} b - 第二個加數
* @returns {number} 兩數相加的結果
*/
function add(a, b) {
return a + b;
}
3. 註解與程式碼的相對位置
| 位置 | 建議 | 範例 |
|---|---|---|
| 行首 | 用於說明整段程式的目的 | // 初始化全局變數 |
| 行尾 | 簡短說明單行語句的細節 | let total = price * qty; // 計算總金額 |
| 區塊前 | 描述區塊功能或限制 | /* --------------------------------------------------- * 事件監聽設定 * --------------------------------------------------- */ |
4. 註解在編譯/壓縮過程中的處理
- 開發環境:保留所有註解,方便除錯。
- 生產環境:使用工具(如 UglifyJS、Terser)移除 非必要 註解,減少檔案大小。
- 若希望某段註解在壓縮後仍保留(例如授權資訊),可使用
/*!開頭的多行註解。
/*!
* MyLibrary v1.2.3
* (c) 2025 MyCompany
* Released under MIT License
*/
常見陷阱與最佳實踐
| 陷阱 | 說明 | 改善方式 |
|---|---|---|
| 過度註解 | 每行程式都寫註解,導致閱讀負擔加重。 | 只在關鍵決策點或不易理解的地方加註。 |
| 註解與程式不同步 | 程式碼改動後忘記更新註解,造成資訊不一致。 | 采用 代碼審查 或 自動化檢查,把更新註解列入檢查清單。 |
| 使用不明確的縮寫 | 註解中出現團隊內部縮寫,外部閱讀者不易理解。 | 盡量使用全寫或在第一次出現時說明縮寫含義。 |
| 在生產環境遺留除錯訊息 | console.log 前面加了 // 暫時關閉,卻忘記移除,導致程式碼雜訊。 |
使用 Lint(如 ESLint)檢測未移除的除錯語句。 |
| 多行註解嵌套 | /* ... /* nested */ ... */ 會造成語法錯誤。 |
避免在多行註解內再使用 /* */,改用單行註解或分段多行註解。 |
最佳實踐:
- 保持簡潔:每則註解不超過一兩句,必要時拆成多條單行註解。
- 統一風格:團隊可制定註解規範(如使用
//開頭、JSDoc 標準),並在 CI 中執行檢查。 - 適時刪除:不再需要的註解要即時移除,避免留下過時資訊。
- 使用 IDE 支援:利用 VS Code、WebStorm 等編輯器的註解自動完成與格式化功能,提高一致性。
實際應用場景
1. 大型前端專案的模組說明
在 React、Vue 或 Angular 等框架中,每個元件(Component)往往會有複雜的 props、state 與生命周期。利用 JSDoc 為每個屬性加上說明,可在編輯器中即時顯示提示,減少錯誤。
/**
* 商品卡片元件
* @component
* @param {Object} props - 元件屬性
* @param {string} props.title - 商品名稱
* @param {number} props.price - 商品價格
* @param {string[]} props.tags - 商品標籤
*/
function ProductCard({ title, price, tags }) {
// ...
}
2. 後端 Node.js API 的說明文件
透過 JSDoc + swagger-jsdoc,將註解直接轉換成 OpenAPI 規範,讓前端團隊能自動產生 API 文件。
/**
* @swagger
* /api/users:
* get:
* summary: 取得使用者列表
* responses:
* 200:
* description: 成功回傳使用者陣列
*/
app.get('/api/users', (req, res) => {
// ...
});
3. 教學或示範程式碼的逐步說明
在教學文章或課程投影片中,行尾註解可即時指出每行程式的目的,讓讀者不必來回跳躍。
let sum = 0; // 初始化總和
for (let i = 1; i <= 10; i++) {
sum += i; // 累加 1~10 的數字
}
console.log(sum); // 輸出結果 55
4. 需要保留版權資訊的開源函式庫
使用 /*! 開頭的多行註解,確保在程式碼壓縮後仍保留授權聲明,符合許可證要求。
/*!
* lodash v4.17.21
* https://lodash.com/
* (c) 2025 John-David Dalton
* Released under MIT License
*/
總結
註解是 程式碼的說明書,在 JavaScript 開發中扮演不可或缺的角色。掌握單行與多行註解的正確語法、善用 JSDoc 產生文件、在適當位置加入說明、以及遵守團隊規範,都是提升程式可讀性與維護性的關鍵。
同時,避免過度註解、保持註解與程式同步、利用 Lint 與 CI 檢查,能防止常見的陷阱。把註解當作 溝通工具,而不是把程式碼堆砌在註解之下的備忘錄,才能在日後的除錯、重構與團隊合作中發揮最大效益。
透過本文的範例與最佳實踐,希望讀者在日常開發中能更自信地使用註解,寫出既 清晰 又 高效 的 JavaScript 程式碼。祝 coding 順利!