點擊右上方紅色按鈕關注“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
區別
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