在許多計算機(jī)語言中,有且僅有一個表示“無”的值唾戚,如C語言的NULL扳肛,Java的null,Python的None统求。
然而JS中竟然有兩個表示“無”的值:null和undefined检碗,這是為什么?它們之間又有什么區(qū)別码邻?
undefined與null
-
null
空的對象引用折剃。
1995年JavaScript誕生之初,像Java一樣像屋,只設(shè)置了null表示“什么都沒有”怕犁,因此和Java一樣,
(1) null被當(dāng)成一個對象;
(2) null可以自動轉(zhuǎn)化為0奏甫;
typeof null; //返回值為 object
Number(null); //返回值為 0
-
undefined
后來JS的設(shè)計者Brendan Eich認(rèn)為“無”的值最好不是對象戈轿,且由于null自動轉(zhuǎn)化為0,因此造成錯誤不易被發(fā)現(xiàn)阵子。
因此思杯,Brendan Eich又設(shè)計了一個undefined,表示“缺少值”挠进,即此處應(yīng)有一個值智蝠,但還沒有定義;轉(zhuǎn)為數(shù)值時為NaN(非數(shù)字值的特殊值)奈梳。
Number(undefined); //NaN
5+undefined; //Nan
典型的出現(xiàn)場景如下:
(1)變量被聲明了,但沒有賦值解虱;
(2) 調(diào)用函數(shù)時攘须,應(yīng)提供的參數(shù)未提供
(3) 對象沒的屬性未定義;
(4) 對象沒有返回值殴泰,則默認(rèn)返回undefined
var i;
i; //undefined
function f(x) {
console.log(X);
}
f(); //undefined
var o = new Object();
o.name; //undefined
var x = f();
x; //undefined
(完)