當程式或某段程式碼出了錯,或出現非預期的狀況時,回報錯誤是很有用的。
它們是 JavaScript 物件。
這個物件的主要屬性是message:
const error = new Error('Oops, something went wrong');
console.log(error.message);
// => "Oops, something went wrong"
使用throw語法,你可以拋出一個 Error。
throw new Error('Oops');
當錯誤被拋出時,目前的執行會停止,並在呼叫堆疊的第一個 catch 區塊中繼續執行。
try {
throw new Error('Oops');
} catch (error) {
console.log(error.message);
// => "Oops"
}
就像 JavaScript 中的任何類別一樣,子類別可以使用extends關鍵字繼承Error,來建立自訂錯誤。
instanceof語法會檢查捕捉到的錯誤是否為某個Error子類別的實例。
class CustomError extends Error {}
try {
// ... Code that may throw an error
} catch (error) {
if (error instanceof CustomError) {
console.log('The error thrown is an instance of the CustomError');
}
}
除了Error物件之外,還有其他內建的錯誤物件。你可以在這裡了解更多。
你也可以建立一個繼承自某個內建錯誤型別的類別,來定義自己的自訂錯誤型別
class MyCustomError extends Error {}
雖然throw語法通常用來拋出 Error 物件,但 JavaScript 很有彈性,可以讓你拋出string、null或任何基本型別。
雖然這在 JavaScript 中並非標準做法,但大多數 JavaScript 環境都會在 Error 物件上實作stack屬性,讓你能取得所拋出錯誤的堆疊追蹤。