我所知道的JavaScript之undefined和null的區別

對於undefined和null我一直知道他們有不少區別,也知道一點關於他們的區別,但卻不具體系統,所以總結了一下,主要心得以下:函數

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

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

具體表現以下:對象

a;
console.log(a);
//Uncaught ReferenceError: a is not defined

var b = null;
console.log(b); //null

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

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的值相等而類型不相等。console

2.數字運算不相同
1+null 
//1

1+undefined 
//NaN

這是因爲約定的不一樣所決定的。在規定中數字與undefined運算時,結果都NaN。在與null運算時,null始終爲0。變量

3.具體做法不同

當咱們想要判斷一個值是否存在能夠這樣寫:object

objA.valueA === undefined

而當咱們想要判斷一個對象是否爲空時能夠這麼寫:總結

objA.valueA == 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
相關文章
相關標籤/搜索