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"
 } 
}