JS-10: Error handling

更新 發佈閱讀 6 分鐘

了解常見的錯誤消息將幫助您更有效的調試程式碼,四種常見的錯誤消息為

  1. SyntaxError,當程式碼的語法不符合 JavaScript 語法規範時,就會拋出 SyntaxError

常見情況:

  • 缺少括號、引號、分號。
  • 使用了無效的語法結構。

範例:

// 語法錯誤:少了一個括號
if (true {
console.log("This will throw a SyntaxError");
}

// 語法錯誤:使用了非法的識別符號
let my-variable = 10; // "-" 是非法的變數名稱字符

  1. ReferenceError,當引用了一個不存在的變數或尚未初始化的變數時,就會拋出 ReferenceError

常見情況:

  • 變數未定義。
  • 變數的作用域超出範圍。

範例:

// 變數未定義
console.log(x); // ReferenceError: x is not defined

// 使用變數前沒有定義
function test() {
console.log(myVar); // ReferenceError: myVar is not defined
}

  1. TypeError,當對一個數據類型執行了不合法的操作時,就會拋出 TypeError

常見情況:

  • 試圖調用 nullundefined 上的方法。
  • 非函數類型的對象被當作函數調用。
  • 賦值時類型不匹配。
  • 對數據類型使用方法,但那個方法不適用於此數據類型。

範例:

// 對 null 調用方法
let obj = null;
obj.toString(); // TypeError: Cannot read properties of null

// 非函數被當作函數調用
let num = 123;
num(); // TypeError: num is not a function

  1. RangeError,當一個數值超出有效範圍,或使用了一個無效的陣列長度等情況時,會拋出 RangeError

常見情況:

  • 設定無效的數組長度。
  • 遞迴深度超過限制。
// 無效的數組長度
let arr = new Array(-1); // RangeError: Invalid array length

// 遞迴深度過深
function recurse() {
return recurse();
}
recurse(); // RangeError: Maximum call stack size exceeded

好,對一些常見的錯誤有了基本的了解後,我們要認識 throw 語句,其用於拋出用戶自訂義的異常情況,而處理這些異常能防止你的程式終止或崩潰。

範例:

function validataNumber(input) {
if(typeof input !== "Number") {
throw new TypeError("Expected a number, but received " + typeof input);
}
return input * 5;
}
  • 明確表示這是一個類型錯誤,用來指示數據類型不正確的錯誤。

如果你想拋出一個完全自訂的錯誤消息,你可以使用錯誤構造函數,用來拋出通用的錯誤,不限制特定類型。

範例:

function divide(numerator, denominator) {
if(denominator === 0) {
throw new Error("除零錯誤");
}
return numerator / denominator;
}
  • 將檢查分母是否為0,如果是的話,他會回傳自訂義的錯誤訊息,否則就執行除法動作。
  • 當錯誤不屬於 JavaScript 內建的特定錯誤類型(如 TypeErrorRangeError)時,使用 Error

好,現在我要來介紹try-catch-finally,其是 JavaScript 中用來處理錯誤的結構,讓程式在發生異常時能優雅地處理。

結構:

try {
// 嘗試執行的代碼塊
// 如果此處的代碼拋出錯誤,會跳到 catch 區塊執行
} catch (error) {
// 捕捉錯誤並處理
// error 是自動傳入的參數,包含錯誤訊息和堆疊信息
} finally {
// 無論是否發生錯誤,這裡的代碼都會執行
// 通常用來清理資源
}

示範:

try {
const numerator = Number(window.prompt("請輸入被除數: "));
const denominator = Number(window.prompt("請輸入除數: "));

if(denominator === 0) {
throw new Error("不能除零")
}
if(isNaN(numerator) || isNaN(denominator)) {
throw new Error("輸入必須是數字")
}
const result = numerator / denominator;
console.log(result)
}
catch(error) {
console.log(error);
}
finally {
console.log("This will always run, no matter what.");
}

window 是瀏覽器中的全域物件(global object),它代表整個瀏覽器視窗。所有的全域函數和變數,默認情況下都屬於這個物件的一部分。可以省略 window,直接調用 prompt()

呈現效果:

情況 1:用戶嘗試除以零

raw-image

情況 2:用戶輸入非數字(或輸入空值)

raw-image

情況 3:用戶輸入有效數字

raw-image
留言
avatar-img
電資鼠 - 您的學習好夥伴
19會員
242內容數
在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 C/C++、Python、數位邏輯、電路學與嵌入式開發等大學電資領域的課程,正是進入這個高薪、高需求產業的關鍵!
2025/03/03
本章節你將了解 日期物件,包括處理日期的方法以及如何設定日期格式,切入要點的示範所有常見的使用方法範例與應用。
Thumbnail
2025/03/03
本章節你將了解 日期物件,包括處理日期的方法以及如何設定日期格式,切入要點的示範所有常見的使用方法範例與應用。
Thumbnail
2025/03/03
表單驗證是一個在用戶輸入資料時確保其正確性、完整性及格式符合要求的重要功能,它可以在用戶提交表單之前進行檢查,防止錯誤資料的傳輸。本章節將帶你初步了解其原理與使用。
2025/03/03
表單驗證是一個在用戶輸入資料時確保其正確性、完整性及格式符合要求的重要功能,它可以在用戶提交表單之前進行檢查,防止錯誤資料的傳輸。本章節將帶你初步了解其原理與使用。
2025/03/03
本篇文章深入淺出地介紹 JavaScript 正規表達式,從基本語法、常用符號、方法應用到進階的捕獲群組、斷言等,並搭配豐富的範例程式碼,幫助讀者快速掌握正規表達式的使用技巧。
2025/03/03
本篇文章深入淺出地介紹 JavaScript 正規表達式,從基本語法、常用符號、方法應用到進階的捕獲群組、斷言等,並搭配豐富的範例程式碼,幫助讀者快速掌握正規表達式的使用技巧。
看更多
你可能也想看
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
本章介紹了 PHP 中的例外處理技術,包括其語法、常見異常類型以及如何主動觸發異常訊息。我們還學習了如何自定義異常類別,以便更好地管理和處理不同類型的異常情況。通過使用例外處理,可以提高程式碼的穩定性、可讀性和可維護性,並提供更優雅的錯誤信息處理機制。
Thumbnail
本章介紹了 PHP 中的例外處理技術,包括其語法、常見異常類型以及如何主動觸發異常訊息。我們還學習了如何自定義異常類別,以便更好地管理和處理不同類型的異常情況。通過使用例外處理,可以提高程式碼的穩定性、可讀性和可維護性,並提供更優雅的錯誤信息處理機制。
Thumbnail
本章節旨在介紹Java程式語言中的「例外處理」概念。透過各個小節,讀者將學習到何謂例外處理、為何要使用它、如何在Java中實現例外處理,以及如何正確地捕獲和處理各種類型的異常。此外,本章節還提供了如何主動觸發異常,以及如何創建和使用自定義異常的實例。
Thumbnail
本章節旨在介紹Java程式語言中的「例外處理」概念。透過各個小節,讀者將學習到何謂例外處理、為何要使用它、如何在Java中實現例外處理,以及如何正確地捕獲和處理各種類型的異常。此外,本章節還提供了如何主動觸發異常,以及如何創建和使用自定義異常的實例。
Thumbnail
這篇文章主要講解Kotlin的例外處理。內容包括例外處理的目的、`try-catch` 和 `finally` 的用法、常見的異常類型,以及如何定義和觸發自定義的異常訊息。
Thumbnail
這篇文章主要講解Kotlin的例外處理。內容包括例外處理的目的、`try-catch` 和 `finally` 的用法、常見的異常類型,以及如何定義和觸發自定義的異常訊息。
Thumbnail
本章節的目的是介紹在TypeScript中如何進行例外處理。涵蓋了例外處理的重要性、語法、常見異常類型以及如何主動觸發異常訊息及用戶自定義異常訊息。為讀者提供了全面而深入的了解,以提高程式的可靠性、提供更好的反饋、增加程式的容錯性以及改善程式的可讀性。
Thumbnail
本章節的目的是介紹在TypeScript中如何進行例外處理。涵蓋了例外處理的重要性、語法、常見異常類型以及如何主動觸發異常訊息及用戶自定義異常訊息。為讀者提供了全面而深入的了解,以提高程式的可靠性、提供更好的反饋、增加程式的容錯性以及改善程式的可讀性。
Thumbnail
當你在開發程式時,難免會遇到各種錯誤和異常情況。這些錯誤可能是因為代碼中的錯誤、外部資源無法訪問或其他不可預期的狀況。為了提高程式的可靠性、穩定性和可維護性,我們使用「例外處理」來處理這些異常情況。
Thumbnail
當你在開發程式時,難免會遇到各種錯誤和異常情況。這些錯誤可能是因為代碼中的錯誤、外部資源無法訪問或其他不可預期的狀況。為了提高程式的可靠性、穩定性和可維護性,我們使用「例外處理」來處理這些異常情況。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
本章節介紹C#的「例外處理」,包括使用try-catch語法處理錯誤,finally關鍵字的使用,以及如何主動引發和自定義異常。
Thumbnail
本章節介紹C#的「例外處理」,包括使用try-catch語法處理錯誤,finally關鍵字的使用,以及如何主動引發和自定義異常。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News