在前端開發中,ReferenceError
和 TypeError
都是常見的 JavaScript 錯誤,但它們表示不同的問題:
ReferenceError:
-
含義: 當你嘗試訪問一個未宣告或未初始化的變數時,就會丟擲
ReferenceError
。 也就是說,JavaScript 引擎無法在當前作用域或任何父作用域中找到你引用的變數。 -
常見場景:
- 拼寫錯誤:例如,
console.log(myVarible);
// 拼寫錯誤,應該是 myVariable - 作用域問題:在一個函式內部嘗試訪問外部未宣告的變數。
- 使用已刪除的變數:例如,使用了
delete
運算子刪除了變數,之後又嘗試訪問它。 - 訪問未定義的屬性:例如,
const obj = {}; console.log(obj.nonExistentProperty);
- 拼寫錯誤:例如,
TypeError:
-
含義: 當你對一個變數執行的操作與其資料型別不相容時,就會丟擲
TypeError
。 也就是說,你嘗試對一個值執行一個它不支援的操作。 -
常見場景:
- 對非函式呼叫
()
:例如,const myVar = 10; myVar();
// 嘗試呼叫一個數字 - 訪問
null
或undefined
的屬性:例如,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 程式碼,並更快地找到問題的根源。