null:Null類型,代表 “空值”,代表一個空對象指針,使用typeof運算得到 “object” ,所以可以認為它是一個特殊的對象值。
undefined:Undefined類型,當一個聲明了一個變量未初始化時,得到的就是 undefined。
null是javascript的關鍵字,可以認為是對象類型,它是一個空對象指針,和其他語言一樣都代表“空值”,不過undefined卻是javascript才有的。undefined是在ECMAScript第三版引入的,為了區分指針對象和未初始化的變量,它是一個預定義的全局變量。沒有返回值的函數返回為undefined,沒有實參的形參也是undefined。
javascript權威指南:null 和 undefined 都表示 “值的空缺”,你可以認為 undefined 是表示系統級的、出乎意料的或類似錯誤的值的空缺,而null是表示程序級的、正常的或在意料之中的值的空缺。
javascript高級程序設計:在使用var聲明變量但未對其加以初始化時,這個變量的值就是undefined。unll值則是表示空對象指針。
typeof undefined // undefined
typeof null // object
null == undefined // true
ECMAScript認為 undefined 是從 null 中派生出來的,所以把它們定義為相等的。但是,如果在一些情況下,我們一定要區分這兩個值,那么可以使用下面的方法:
1、 null === undefined // false
2、 typeof null === typeof undefined // false
采坑點:
undefined + 6 // NaN
null + 6 // 6
根據C語言的傳統,null被設計成可以自動轉為0
目前的用法
null表示 “沒有對象”,即該處不應該有值。
(1)作為函數的參數,表示該函數的參數不是對象。
(2)作為對象原型鏈的終點。
undefined表示“缺少值”,就是此處應該有一個值,但是還沒有定義。
(1)變量被聲明了,但沒有賦值時,就等於undefined。
(2)調用函數時,應該提供的參數沒有提供,該參數就等於undefined。
(3)對象沒有賦值的屬性,該屬性的值為undefined。
(4)函數沒有返回值時,默認返回undefined。
使用實例
轉化的時候,undefined為NaN,null為0.
Number(undefined) // NaN
Number(undefined + 10) //NaN
Number(null) // 0
Number(10 + null) // 10
undefined === null //false
undefined == null //true