JavaScript中undefined與null詳解

點擊右上方紅色按鈕關注“web秀”,讓你真正秀起來

前言

對於undefined和null我一直知道他們有很多區別,也知道一點關於他們的區別,但卻不具體系統,因此總結了一下,主要心得如下。

JavaScript中undefined與null詳解

JavaScript中undefined與null詳解

含義

要區分它們,首先要明確這兩個值所代表的意義:

  • null 是一個 JavaScript字面量,表示空值,即沒有對象被呈現,它是JavaScript的原始值之一,使用typeof運算得到 “object”。
  • undefined 是全局對象的一個屬性,當聲明瞭一個變量而未初始化時,得到的就是undefined。

具體表現如下:

 a;
console.log(a);
//Uncaught ReferenceError: a is not defined
var b = null;
console.log(b); //null

而它們出現的情景也各不相同,具體總結如下:

null:即表示為空,沒有對象。

  1. 作為函數的參數,表示該函數的參數不是對象。
  2. 作為對象原型鏈的終點。

undefined:表示缺少值,此處應該有值,但未定義。

  1. 變量被聲明瞭,但沒有值,此時為undefined
  2. 調用函數時,應該提供的參數沒有提供,此時為undefined
  3. 對象沒有賦值的屬性,此屬性值為undefined
  4. 函數沒有返回值,默認返回undefined

區別

null與undefined的區別主要體現在以下三點:

1.值相等而類型不相等

 var x;
var y = null;
console.log(x == y); //ture
console.log(x ===y); //false

在上面的代碼中 == 會繼續類型轉換,且值是相等的,所以會得出 ture;而在 === 中則不會發生類型轉換所以得出的是 false。因此undefined和null的值相等而類型不相等。

2.數字運算不相同

 1+null 
//1
1+undefined
//NaN

這是由於約定的不同所決定的。在規定中數字與undefined運算時,結果都NaN。在與null運算時,null始終為0。

3.具體作法不一樣

當我們想要判斷一個值是否存在可以這樣寫:

 obj.value === undefined 

而當我們想要判斷一個對象是否為空時可以這麼寫:

 obj.value == null 

最後借一波MDN總結的null和undefined的區別的代碼:

 typeof null // object (因為一些以前的原因而不是'null')
typeof undefined // undefined
null === undefined // false
null == undefined // true
null === null // true
null == null // true
!null //true
isNaN(1 + null) // false
isNaN(1 + undefined) // true

公告


分享到:


相關文章: