初學前端js常常搞不清楚null與undefined的區別,他們是js中的原始數據類型前端
一、undefined數據類型只有一個值undefined,當聲明的變量未初始化時,變量的默認值是undefined.編程
二、null也只有一個值null,用來表示還沒有存在的對象,經常使用來表示函數企圖返回一個不存在的對象。函數
var a; console.log(a); //undefined
咱們沒有對變量a進行初始化,因此輸出undefined。spa
console.log(document.getElementById("notExistElement"));
//null
當頁面中不存在id爲notExistElement的元素時,輸出null,由於咱們在嘗試獲取一個不存在的對象。code
console.log(typeof undefined); console.log(typeof null);
//undefined
//object
第一行代碼很容易理解,undefined 的類型爲undefined.但第二行代碼讓人很疑惑,null的類型怎麼變成object了呢?這實際上是js最初實現的一個錯誤,後被ECMAscript沿用了下來,如今咱們能夠理解null爲一個不存在的對象佔位符對象
console.log(null==undefined);
//true
這裏就更讓咱們疑惑了,爲甚null==undefined會輸出true呢,ECMAscript認爲undefined是從null派生出來的,因此定義相等。但在實際編程中想區分二者,怎麼辦呢?blog
console.log(null===undefined); console.log(typeof null==typeof undefined); //false //false
"==="爲全等於,不只包括數值還包括類型,前面講了null和undefined類型不一樣,因此輸出false,第二行代碼同理。ip