JavaScript中有7種數(shù)據(jù)類型,
Undefined,Null,Boolean,Number,String,Object,Symbol.undefined和null是其中兩個的數(shù)據(jù)類型的值。我們先看Undefined。
Undefined 類型
Undefined類型只有一個值,即特殊的undefined。在使用let,const,var聲明變量但未對其加以賦值進(jìn)行初始化時,這個值就是undefined。
let message;
console.log(message === undefined);//true
在上面的例子里,變量聲明了,但是沒有初始化就會是undefined。
let message = undefined;
console.log(message === undefined);//true
在上面的例子里我們顯示的聲明了變量的值是undefined,結(jié)果比較相同。
一般而言,我們并沒有必要進(jìn)行上面的操作。不過沒有初始化的值和未聲明的變量還是有區(qū)別的。
let message;//變量聲明了,默認(rèn)的初始化值就是undefined
// let age;
console.log(message);//undefined
console.log(age);//報錯
上面的例子里,我們聲明了變量message,然后打印,結(jié)果是undefined。而age我們并沒有聲明,結(jié)果報錯了。
然而我們通過typeof來進(jìn)行類型判斷時,兩種變量都是undefined。
let message;//
// let age;
console.log(typeof message);//undefined
console.log(typeof age);//undefined
在<JavaScript高級程序設(shè)計>一書中,這里這樣解釋:對未初始化和未聲明的變量執(zhí)行typeof操作符都返回了undefined。但是這個結(jié)果有其邏輯上的合理性。因?yàn)殡m然這兩種聲明從技術(shù)角度看有本質(zhì)區(qū)別。但實(shí)際上無論對哪種變量也不可能執(zhí)行真正的操作。
undefined這個值的引入是為了正式區(qū)分空對象指針與未經(jīng)初始化的變量!
Null類型
Null類型是第二個只有一個值的數(shù)據(jù)類型。這個特殊的值就是null.從邏輯上講,null值表示一個空對象指針,而這也正式使用typeof操作符時會返回object的原因。如下面的例子:
let car = null;
console.log(typeof car);//"object"
如果定義的變量準(zhǔn)備將來用于保存對象,那么最好是將該變量初始化為null.這樣好比較。只要直接堅(jiān)持null值就可以知道相應(yīng)的變量是否已經(jīng)保存了一個對象的引用。
if(car !== null){
//dosomething
}
實(shí)際上undefined值是派生于null的值。因此ECMA-262規(guī)定對它們的相等性測試要返回true。當(dāng)然是兩個==,不是嚴(yán)格等于。
console.log(undefined == null);//true
現(xiàn)在知道它們的區(qū)別了嗎?
-
undefined是為初始化的變量。 -
null是一個空對象指針.typeof null //"object" -
undefined值是派生于null的值