請描述 JavaScript 中 null, undefined 和 undeclared 的差異為何?
null
- 變數被宣告並且被指定爲有意義的空值
null
,通常用來明確地表示「沒有值」或「空物件」的狀態。null
的型別是物件。 - 型別:
null
的型別是物件。 - 使用場景:當你明確地想表示某個變數不應該有任何值時,可以將其設為
null
。
let obj = null;
console.log(typeof obj); // "object"
undefined
- 變數被宣告已經被宣告但是並沒有指派一個值,當 JavaScript 初始化變數或找不到某個物件的屬性時,會自動給它賦值為
undefined
。 - 型別:
undefined
。 - 使用場景:當沒有給變數賦值,或者函數沒有返回值時,JavaScript 會自動給它
undefined
。
在鬆散的比較中, null
== undefined
,但在嚴格比較中 === 它們是不相等的。
console.log(null == undefined); // true
console.log(null === undefined); // false
let x;
console.log(x); // undefined
console.log(typeof x); // "undefined"
undeclared
- undeclared 就是從未被宣告過的變數。如果在嚴格模式下嘗試使用 未宣告的變數,會拋出 ReferenceError 錯誤。
- 使用場景:undeclared 通常是由於變數使用前未宣告造成的錯誤,這在嚴格模式下尤其會被檢測出來。
"use strict";
x = 1; //會在嚴格模式下拋出 ReferenceError 錯誤,因為變數沒有被宣告
console.log(x);