JavaScript中undefined與null詳解

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

前言

對於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:即表示為空,沒有對象。

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

undefined

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

變量被聲明瞭,但沒有值,此時為undefined調用函數時,應該提供的參數沒有提供,此時為undefined對象沒有賦值的屬性,此屬性值為undefined函數沒有返回值,默認返回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

公告