空和未定義

nullundefined 之間的區別

nullundefined 分享抽象相等 == 但不嚴格相等 ===

null == undefined   // true
null === undefined  // false

它們代表略有不同的東西:

  • undefined 表示缺少值,例如在建立識別符號/物件屬性之前,或者在識別符號/函式引數建立和第一次設定之間的時間段(如果有)。
  • null 表示故意缺少已建立的識別符號或屬性*的值*。

它們是不同型別的語法:

  • undefined全域性 Object屬性,通常在全域性範圍內是不可變的。這意味著你可以在任何地方定義除全域性名稱空間之外的識別符號,從該範圍隱藏 undefined(儘管事情仍然可以是 undefined
  • null 是一個單詞文字,所以它的含義永遠不會改變,嘗試這樣做會引發錯誤

nullundefined 之間的相似之處

nullundefined 都是假的。

if (null) console.log("won't be logged");
if (undefined) console.log("won't be logged");

nullundefined 都不等於 false(見這個問題 )。

false == undefined   // false
false == null        // false
false === undefined  // false
false === null       // false

使用 undefined

  • 如果當前範圍不可信,請使用評估為 undefined 的內容,例如 void 0;
  • 如果 undefined 被另一個值遮蔽,那就像遮蔽 ArrayNumber 一樣糟糕。
  • 避免設定undefined。如果要從物件 foodelete foo.bar; 中刪除屬性。 **
  • 針對 undefined 的存在測試識別符號 foo 可能會丟擲參考錯誤,而是使用 typeof foo 來反對 undefined