空值和未定義

JavaScript 有多種方式會指出缺少值。本頁將說明最常見的兩種做法:nullundefined 資料類型。

null

null 關鍵字代表沒有值的定義。null 是基本元素,但 typeof 運算子會傳回 null 是物件。這項錯誤是從第一個 JavaScript 版本推出時才會發生,這是刻意未經處理的情況,以免造成網路上的預期行為中斷。

typeof null
> object

您可以將變數定義為 null,並預期該變數反映指令碼中某個時間點指派的值或明確缺少的值。您也可以將 null 值指派給現有的參照,藉此清除先前的值。

undefined

undefined 是指派給變數的原始值,也就是剛剛宣告的變數,或指派給運算結果所產生的值,但不會傳回有有意義的值。舉例來說,在瀏覽器的開發人員控制台中宣告函式時,就可能會發生這種情況:

function myFunction() {}
> undefined

如果函式的 return 陳述式未傳回任何值,該函式會明確傳回 undefined

(function() {
    return;
}());
> undefined

null」和「undefined」的比較

雖然 undefinednull 在功能上有一些重疊,但用途不同。以最嚴格的方式來說,null 代表刻意定義為「blank」的值,undefined 則代表缺少任何指定值。

nullundefined 彼此相等,但不等於。鬆等式運算子會將不同類型的運算元強制轉換為布林值,使得 nullundefined 均為 false。嚴格等式運算子會將不同資料類型的運算元視為不相等。

null == undefined
> true

null === undefined
> false

與保留關鍵字 null 不同,undefined全域物件的屬性。這項設計決定在 JavaScript 開發初期,讓舊版瀏覽器完全覆寫 undefined。在新型瀏覽器中,您仍可使用 undefined 做為非全域範圍內的 ID,覆寫該宣告範圍內的值。請勿使用 undefined 做為 ID。這可能會導致非預期的行為,並有可能混淆程式碼集的未來維護人員。

隨堂測驗

typeof null 會傳回什麼?

object
undefined
primitive
string