空和未定義
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。