ReferenceError和TypeError有什麼區別?

王铁柱6發表於2024-12-08

在前端開發中,ReferenceErrorTypeError 都是常見的 JavaScript 錯誤,但它們表示不同的問題:

ReferenceError:

  • 含義: 當你嘗試訪問一個未宣告或未初始化的變數時,就會丟擲 ReferenceError。 也就是說,JavaScript 引擎無法在當前作用域或任何父作用域中找到你引用的變數。

  • 常見場景:

    • 拼寫錯誤:例如,console.log(myVarible); // 拼寫錯誤,應該是 myVariable
    • 作用域問題:在一個函式內部嘗試訪問外部未宣告的變數。
    • 使用已刪除的變數:例如,使用了 delete 運算子刪除了變數,之後又嘗試訪問它。
    • 訪問未定義的屬性:例如,const obj = {}; console.log(obj.nonExistentProperty);

TypeError:

  • 含義: 當你對一個變數執行的操作與其資料型別不相容時,就會丟擲 TypeError。 也就是說,你嘗試對一個值執行一個它不支援的操作。

  • 常見場景:

    • 對非函式呼叫 ():例如,const myVar = 10; myVar(); // 嘗試呼叫一個數字
    • 訪問 nullundefined 的屬性:例如,const myVar = null; console.log(myVar.someProperty);
    • 對非物件使用類似陣列的操作:例如,const myVar = 10; myVar.length; // 嘗試獲取數字的長度
    • 傳遞不正確的引數型別給函式:例如,一個函式期望一個數字,但你傳遞了一個字串。

總結:

錯誤型別 原因
ReferenceError 嘗試訪問不存在的變數
TypeError 對變數執行了與其型別不相容的操作

示例:

// ReferenceError
console.log(undeclaredVariable); // ReferenceError: undeclaredVariable is not defined

// TypeError
const num = 10;
num.toUpperCase(); // TypeError: num.toUpperCase is not a function

const obj = null;
console.log(obj.property); // TypeError: Cannot read properties of null (reading 'property')

透過理解這兩種錯誤型別的區別,你可以更有效地除錯 JavaScript 程式碼,並更快地找到問題的根源。

相關文章