為什麼要使用「例外處理」
- 提高程式的可靠性: 通過處理異常,我們可以避免程式因為異常情況而崩潰或產生未預期的行為,從而提高程式的可靠性。
- 提供更好的反饋: 使用例外處理可以提供更具描述性的錯誤訊息,幫助開發者快速定位並修復問題。
- 增加程式的容錯性: 通過捕獲和處理異常,我們可以使程式在面對錯誤時優雅地回退或提供替代方案,從而增加程式的容錯性。
- 改善程式的可讀性: 通過將異常處理代碼與正常業務邏輯分離,可以使程式的結構更清晰、更易於理解。
語法
在 TypeScript 中,例外處理語句使用 try...catch...finally
塊來捕獲和處理異常。
try {
// 可能發生錯誤的代碼
} catch (error) {
// 處理錯誤的代碼
} finally {
// 無論是否發生錯誤都會執行的代碼
}
示例
try {
let result = riskyOperation();
console.log(result);
} catch (error) {
console.error("An error occurred:", error.message);
} finally {
console.log("This will always execute");
}
常見異常類型
在 TypeScript 中,常見的異常類型包括:
RangeError
: 當數值不在預期範圍內時引發。ReferenceError
: 當引用一個不存在的變量時引發。SyntaxError
: 當語法錯誤時引發。TypeError
: 當變量或參數不是預期的類型時引發。URIError
: 當使用encodeURI
或decodeURI
時遇到錯誤的 URI 時引發。
示例
try {
// RangeError 示例
let num = new Array(-1);
} catch (error) {
console.error("RangeError:", error.message);
}
try {
// ReferenceError 示例
console.log(nonExistentVariable);
} catch (error) {
console.error("ReferenceError:", error.message);
}
try {
// SyntaxError 示例
eval('foo bar');
} catch (error) {
console.error("SyntaxError:", error.message);
}
try {
// TypeError 示例
null.f();
} catch (error) {
console.error("TypeError:", error.message);
}
try {
// URIError 示例
decodeURI('%');
} catch (error) {
console.error("URIError:", error.message);
}
主動觸發異常訊息
可以使用throw
關鍵字主動引發異常訊息。function riskyOperation() {
throw new Error("Something went wrong");
}
try {
riskyOperation();
} catch (error) {
console.error(error.message); // Something went wrong
}
主動觸發用戶自定義異常訊息
可以創建自定義的異常類型,並在需要時引發這些自定義異常。
class CustomError extends Error {
constructor(message: string) {
super(message);
this.name = "CustomError";
}
}
function riskyOperation() {
throw new CustomError("This is a custom error");
}
try {
riskyOperation();
} catch (error) {
if (error instanceof CustomError) {
console.error("CustomError caught:", error.message);
} else {
console.error("An unexpected error occurred:", error.message);
}
}
通過上述方式,可以有效地在 TypeScript 中處理各種異常情況,並確保程序在面對錯誤時能夠優雅地處理並提供有意義的錯誤訊息。