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
在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 C/C++、Python、數位邏輯、電路學與嵌入式開發等大學電資領域的課程,正是進入這個高薪、高需求產業的關鍵!
留言
avatar-img
留言分享你的想法!

































































透過本章的學習,你將了解 JavaScript 事件冒泡 (Event Bubbling) 與事件委託 (Event Delegation),這是前端開發中處理 DOM 事件的重要概念。
本篇文章介紹 JS 中DOM的基本操作,包含節點類型、節點關係、以及常見的 DOM API 使用方法。文中也說明 `innerText` 與 `textContent` 的差異,並示範了 `addEventListener()` 的其他事件類型。是一篇實作類型的教學文章,意在幫你輕鬆入門這項技術。
本章將深入探討 JS中高階函式 (Higher-Order Functions) 與回呼函式 (Callback Functions),這是 函數式程式設計的核心概念。透過學習高階函式的應用,如 map()、filter()等,以及回呼函式的使用,你將能夠寫出更簡潔、可讀性更高且可重複使用的程式碼。
物件是一種鍵值對(Key-Value Pair)的數據結構。用於儲存和組織複雜的資料。 本章節不廢話的帶你嘗試各種物件的操作,透過本章的學習,你將能夠掌握 JavaScript 物件操作技巧,並為後續學習物件導向程式設計 、API 資料處理與前端框架(如 React)打下堅實基礎!
本章將深入探討 JavaScript 陣列 (Arrays),這是一種用來儲存多筆相關數據的結構,比起個別宣告變數,更適合用於大量數據處理與運算。我們將學習如何建立、遍歷陣列與各種操作,並透過實作範例來熟悉 陣列方法 (Array Methods),讓數據處理更加靈活高效。
函數是可重複使用的程式碼區塊,用於執行特定任務或計算,你可以將它視為機器,它可以接受一些變數作為參數,並對其進行一些操作,接著產生輸出。 本章節帶你快速熟悉這個 JavaScript 最核心的概念之一,為更進階的觀念打好基礎。
透過本章的學習,你將了解 JavaScript 事件冒泡 (Event Bubbling) 與事件委託 (Event Delegation),這是前端開發中處理 DOM 事件的重要概念。
本篇文章介紹 JS 中DOM的基本操作,包含節點類型、節點關係、以及常見的 DOM API 使用方法。文中也說明 `innerText` 與 `textContent` 的差異,並示範了 `addEventListener()` 的其他事件類型。是一篇實作類型的教學文章,意在幫你輕鬆入門這項技術。
本章將深入探討 JS中高階函式 (Higher-Order Functions) 與回呼函式 (Callback Functions),這是 函數式程式設計的核心概念。透過學習高階函式的應用,如 map()、filter()等,以及回呼函式的使用,你將能夠寫出更簡潔、可讀性更高且可重複使用的程式碼。
物件是一種鍵值對(Key-Value Pair)的數據結構。用於儲存和組織複雜的資料。 本章節不廢話的帶你嘗試各種物件的操作,透過本章的學習,你將能夠掌握 JavaScript 物件操作技巧,並為後續學習物件導向程式設計 、API 資料處理與前端框架(如 React)打下堅實基礎!
本章將深入探討 JavaScript 陣列 (Arrays),這是一種用來儲存多筆相關數據的結構,比起個別宣告變數,更適合用於大量數據處理與運算。我們將學習如何建立、遍歷陣列與各種操作,並透過實作範例來熟悉 陣列方法 (Array Methods),讓數據處理更加靈活高效。
函數是可重複使用的程式碼區塊,用於執行特定任務或計算,你可以將它視為機器,它可以接受一些變數作為參數,並對其進行一些操作,接著產生輸出。 本章節帶你快速熟悉這個 JavaScript 最核心的概念之一,為更進階的觀念打好基礎。
你可能也想看
Google News 追蹤
Thumbnail
本章介紹了 PHP 中的例外處理技術,包括其語法、常見異常類型以及如何主動觸發異常訊息。我們還學習了如何自定義異常類別,以便更好地管理和處理不同類型的異常情況。通過使用例外處理,可以提高程式碼的穩定性、可讀性和可維護性,並提供更優雅的錯誤信息處理機制。
Thumbnail
本章節旨在介紹Java程式語言中的「例外處理」概念。透過各個小節,讀者將學習到何謂例外處理、為何要使用它、如何在Java中實現例外處理,以及如何正確地捕獲和處理各種類型的異常。此外,本章節還提供了如何主動觸發異常,以及如何創建和使用自定義異常的實例。
Thumbnail
這篇文章主要講解Kotlin的例外處理。內容包括例外處理的目的、`try-catch` 和 `finally` 的用法、常見的異常類型,以及如何定義和觸發自定義的異常訊息。
Thumbnail
本章節的目的是介紹在TypeScript中如何進行例外處理。涵蓋了例外處理的重要性、語法、常見異常類型以及如何主動觸發異常訊息及用戶自定義異常訊息。為讀者提供了全面而深入的了解,以提高程式的可靠性、提供更好的反饋、增加程式的容錯性以及改善程式的可讀性。
Thumbnail
當你在開發程式時,難免會遇到各種錯誤和異常情況。這些錯誤可能是因為代碼中的錯誤、外部資源無法訪問或其他不可預期的狀況。為了提高程式的可靠性、穩定性和可維護性,我們使用「例外處理」來處理這些異常情況。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
本章節介紹C#的「例外處理」,包括使用try-catch語法處理錯誤,finally關鍵字的使用,以及如何主動引發和自定義異常。
Thumbnail
確保沒有遺漏或錯誤 程式的完整資訊資料對於程式設計至關重要。這是因為只有透過完整的資訊,我們才能確保在程式設計中沒有任何遺漏或錯誤。最終,後台管理扮演著管理系統中所有動作和行為是否符合特定標準的重要角色。 採取不符合預期的行動 這種符合性的重要性在於,當我們設計程式時,希望使用者按照預期的方式
Thumbnail
本文介紹Python程式設計中處理異常的try, except, else, finally語句,並提供程式範例來更深刻理解使用方法。
本課程學習如何在 Android Studio 中使用快速查找功能來尋找程式碼錯誤問題。
Thumbnail
本章介紹了 PHP 中的例外處理技術,包括其語法、常見異常類型以及如何主動觸發異常訊息。我們還學習了如何自定義異常類別,以便更好地管理和處理不同類型的異常情況。通過使用例外處理,可以提高程式碼的穩定性、可讀性和可維護性,並提供更優雅的錯誤信息處理機制。
Thumbnail
本章節旨在介紹Java程式語言中的「例外處理」概念。透過各個小節,讀者將學習到何謂例外處理、為何要使用它、如何在Java中實現例外處理,以及如何正確地捕獲和處理各種類型的異常。此外,本章節還提供了如何主動觸發異常,以及如何創建和使用自定義異常的實例。
Thumbnail
這篇文章主要講解Kotlin的例外處理。內容包括例外處理的目的、`try-catch` 和 `finally` 的用法、常見的異常類型,以及如何定義和觸發自定義的異常訊息。
Thumbnail
本章節的目的是介紹在TypeScript中如何進行例外處理。涵蓋了例外處理的重要性、語法、常見異常類型以及如何主動觸發異常訊息及用戶自定義異常訊息。為讀者提供了全面而深入的了解,以提高程式的可靠性、提供更好的反饋、增加程式的容錯性以及改善程式的可讀性。
Thumbnail
當你在開發程式時,難免會遇到各種錯誤和異常情況。這些錯誤可能是因為代碼中的錯誤、外部資源無法訪問或其他不可預期的狀況。為了提高程式的可靠性、穩定性和可維護性,我們使用「例外處理」來處理這些異常情況。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
本章節介紹C#的「例外處理」,包括使用try-catch語法處理錯誤,finally關鍵字的使用,以及如何主動引發和自定義異常。
Thumbnail
確保沒有遺漏或錯誤 程式的完整資訊資料對於程式設計至關重要。這是因為只有透過完整的資訊,我們才能確保在程式設計中沒有任何遺漏或錯誤。最終,後台管理扮演著管理系統中所有動作和行為是否符合特定標準的重要角色。 採取不符合預期的行動 這種符合性的重要性在於,當我們設計程式時,希望使用者按照預期的方式
Thumbnail
本文介紹Python程式設計中處理異常的try, except, else, finally語句,並提供程式範例來更深刻理解使用方法。
本課程學習如何在 Android Studio 中使用快速查找功能來尋找程式碼錯誤問題。