錯誤代碼片段
function process() {
onHello = document.createTextNode("xxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
onUl = document.createElement("ul");
onLiblack = document.createElement("li"); // 變量名: onLiblack
black = document.createTextNode("black");
onLiBlack.appendChild(black); // 使用時: onLiBlack (大寫 B)
// ...
}
根因:JavaScript 區分大小寫
- 聲明變量
onLiblack(小寫 b)
- 調用
onLiBlack.appendChild()(大寫 B)
- JavaScript 視為兩個不同標識符,
onLiBlack 未定義 → ReferenceError
修正代碼
function process() {
const helloText = document.createTextNode("xxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
const ul = document.createElement("ul");
const liBlack = document.createElement("li");
const blackText = document.createTextNode("black");
liBlack.appendChild(blackText); // 統一使用 liBlack
const liOrange = document.createElement("li");
const orangeText = document.createTextNode("orange");
liOrange.appendChild(orangeText);
const liPink = document.createElement("li");
const pinkText = document.createTextNode("pink");
liPink.appendChild(pinkText);
ul.appendChild(liBlack);
ul.appendChild(liOrange);
ul.appendChild(liPink);
const div = document.getElementById("mydivElement");
div.appendChild(helloText);
div.appendChild(ul);
}
最佳實踐:避免此類錯誤
- 使用 const/let 替代隱式全局變量
- 統一命名規範:camelCase(如
liBlack)
- 啟用 ESLint:
no-undef 規則可靜態檢測
- IDE 智能提示:VS Code/WebStorm 會標記未聲明變量
- 代碼審查:重點檢查 DOM 操作變量一致性
調試技巧
// 瀏覽器 Console 直接輸入變量名檢查
> onLiblack
< li element
> onLiBlack
< ReferenceError: onLiBlack is not defined
擴展:其他常見未定義錯誤
| 錯誤類型 | 典型原因 | 解決方案 |
| 函數未定義 | 腳本加載順序錯誤 | defer/async、模塊化導入 |
| 屬性未定義 | 對象未初始化 | 可選鏈 ?.、默認值 |
| 模塊未定義 | 導出/導入名稱不匹配 | 檢查 export/import 拼寫 |