瀏覽器遇到 JS 錯誤會停止後續程式碼執行,並在主控台顯示紅色錯誤(舊版 IE 為黃色驚嘆號)。使用 try-catch 可捕獲錯誤,讓程式繼續執行,並可自定義錯誤處理邏輯。
try {
// 可能拋出錯誤的程式碼
var a = "hello world";
document.write(a); // 故意寫錯 write -> Write
} catch (e) {
// 錯誤處理
console.error('捕獲錯誤:', e.message);
// 可上報錯誤追蹤服務
// 顯示友善提示給使用者
}
| 屬性 | 說明 |
|---|---|
message | 錯誤描述字串 |
name | 錯誤類型名稱 (TypeError, ReferenceError...) |
stack | 堆疊追蹤 (現代瀏覽器) |
fileName, lineNumber | 錯誤位置 (Firefox 等) |
try { risky(); } catch (e) { handle(e); } finally { cleanup(); }
// finally 不管有無錯誤都會執行
function checkAge(age) {
if (age < 0) throw new RangeError('年齡不能為負數');
if (age > 150) throw new RangeError('年齡不合理');
}
try { checkAge(-5); } catch (e) { console.log(e.name + ': ' + e.message); }
try-catch 無法捕獲:
window.onerror 或 window.addEventListener('error') 全域捕獲)window.addEventListener('error', function(event) {
// event: ErrorEvent
logToServer({
message: event.message,
filename: event.filename,
lineno: event.lineno,
colno: event.colno,
stack: event.error?.stack
});
return true; // 阻止預設瀏覽器錯誤顯示
});
// Promise 未捕獲拒絕
window.addEventListener('unhandledrejection', function(event) {
logToServer({ reason: event.reason });
});