JavaScript 有多種方式會指出缺少值。本頁將說明最常見的兩種做法:null
和 undefined
資料類型。
null
null
關鍵字代表沒有值的定義。null
是基本元素,但 typeof
運算子會傳回 null
是物件。這項錯誤是從第一個 JavaScript 版本推出時才會發生,這是刻意未經處理的情況,以免造成網路上的預期行為中斷。
typeof null
> object
您可以將變數定義為 null
,並預期該變數反映指令碼中某個時間點指派的值或明確缺少的值。您也可以將 null
值指派給現有的參照,藉此清除先前的值。
undefined
undefined
是指派給變數的原始值,也就是剛剛宣告的變數,或指派給運算結果所產生的值,但不會傳回有有意義的值。舉例來說,在瀏覽器的開發人員控制台中宣告函式時,就可能會發生這種情況:
function myFunction() {}
> undefined
如果函式的 return
陳述式未傳回任何值,該函式會明確傳回 undefined
。
(function() {
return;
}());
> undefined
「null
」和「undefined
」的比較
雖然 undefined
和 null
在功能上有一些重疊,但用途不同。以最嚴格的方式來說,null
代表刻意定義為「blank」的值,undefined
則代表缺少任何指定值。
null
和 undefined
彼此相等,但不等於。鬆等式運算子會將不同類型的運算元強制轉換為布林值,使得 null
和 undefined
均為 false
。嚴格等式運算子會將不同資料類型的運算元視為不相等。
null == undefined
> true
null === undefined
> false
與保留關鍵字 null
不同,undefined
是全域物件的屬性。這項設計決定在 JavaScript 開發初期,讓舊版瀏覽器完全覆寫 undefined
。在新型瀏覽器中,您仍可使用 undefined
做為非全域範圍內的 ID,覆寫該宣告範圍內的值。請勿使用 undefined
做為 ID。這可能會導致非預期的行為,並有可能混淆程式碼集的未來維護人員。
隨堂測驗
typeof null
會傳回什麼?
object
undefined
primitive
string