1. 程式人生 > 實用技巧 >null 與 undefined 區別

null 與 undefined 區別

在JavaScript中,將一個變數賦值為undefined或null,老實說,幾乎沒區別。


var a = undefined;

var a = null;

面程式碼中,a變數分別被賦值為undefined和null,這兩種寫法幾乎等價。

undefined和null在if語句中,都會被自動轉為false,相等運算子甚至直接報告兩者相等。


if (!undefined) 
    console.log('undefined is false');
// undefined is false

if (!null) 
    console.log('null is false');
// null is false

undefined == null
// true

上面程式碼說明,兩者的行為是何等相似!

既然undefined和null的含義與用法都差不多,為什麼要同時設定兩個這樣的值,這不是無端增加JavaScript的複雜度,令初學者困擾嗎?Google公司開發的JavaScript語言的替代品Dart語言,就明確規定只有null,沒有undefined!

null表示"沒有物件",即該處不應該有值。典型用法是:

(1) 作為函式的引數,表示該函式的引數不是物件。

(2) 作為物件原型鏈的終點。


Object.getPrototypeOf(Object.prototype)
// null

undefined表示"缺少值",就是此處應該有一個值,但是還沒有定義。典型用法是:

(1)變數被聲明瞭,但沒有賦值時,就等於undefined。

(2) 呼叫函式時,應該提供的引數沒有提供,該引數等於undefined。

(3)物件沒有賦值的屬性,該屬性的值為undefined。

(4)函式沒有返回值時,預設返回undefined。