JavaScript 提供了一組 8 個錯誤物件,這些物件會根據錯誤類型在 try/catch 區塊中引發。它們分別是:
Error
EvalError
RangeError
ReferenceError
SyntaxError
TypeError
URIError
我在JavaScript errors教程中對它們進行了分析。
在這裡,我想解釋如何通過擴展基本 Error 類別來創建自己的自訂錯誤:
class OutOfFuelError extends Error {}
class FlatTireError extends Error {}
自訂錯誤物件能根據特定的錯誤類型以不同的方式進行處理,而不需要使用錯誤訊息來瞭解錯誤的類型。
try {
// 一些程式碼
} catch (err) {
if (err instanceof OutOfFuelError) {
// 處理錯誤方式
} else if (err instanceof FlatTireError) {
// 處理錯誤方式
}
}
在你的程式碼中,自訂錯誤必須明確地拋出才能執行上述動作:
try {
const car = new Car() // 假設我們有一個 Car 物件
if (!car.fuel) {
throw new OutOfFuelError('沒有燃料!')
}
if (car.flatTire) {
throw new FlatTireError('爆胎了!')
}
} catch (err) {
if (err instanceof OutOfFuelError) {
// 處理錯誤方式
} else if (err instanceof FlatTireError) {
// 處理錯誤方式
}
}
在錯誤物件的建立過程中,你也可以自訂與類別有關的任何內容,甚至是自訂建構子接收的參數:
class OutOfFuelError extends Error {
constructor(message) {
super(message)
this.name = "OutOfFuelError"
}
}