空和未定義
null
和 undefined
之間的區別
null
和 undefined
分享抽象相等 ==
但不嚴格相等 ===
,
null == undefined // true
null === undefined // false
它們代表略有不同的東西:
undefined
表示缺少值,例如在建立識別符號/物件屬性之前,或者在識別符號/函式引數建立和第一次設定之間的時間段(如果有)。null
表示故意缺少已建立的識別符號或屬性*的值*。
它們是不同型別的語法:
undefined
是全域性 Object 的屬性,通常在全域性範圍內是不可變的。這意味著你可以在任何地方定義除全域性名稱空間之外的識別符號,從該範圍隱藏undefined
(儘管事情仍然可以是undefined
)null
是一個單詞文字,所以它的含義永遠不會改變,嘗試這樣做會引發錯誤。
null
和 undefined
之間的相似之處
null
和 undefined
都是假的。
if (null) console.log("won't be logged");
if (undefined) console.log("won't be logged");
null
或 undefined
都不等於 false
(見這個問題 )。
false == undefined // false
false == null // false
false === undefined // false
false === null // false
使用 undefined
- 如果當前範圍不可信,請使用評估為 undefined 的內容,例如
void 0;
。 - 如果
undefined
被另一個值遮蔽,那就像遮蔽Array
或Number
一樣糟糕。 - 避免設定為
undefined
。如果要從物件foo
,delete foo.bar;
中刪除屬性欄。 ** - 針對
undefined
的存在測試識別符號foo
可能會丟擲參考錯誤,而是使用typeof foo
來反對undefined
。