不積跬步之undefined和null的區(qū)別

JavaScript中有7種數(shù)據(jù)類型,Undefined,Null,Boolean,Number,String,Object,Symbol.undefinednull是其中兩個的數(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ū)別了嗎?

  1. undefined是為初始化的變量。
  2. null是一個空對象指針.typeof null //"object"
  3. undefined值是派生于null的值
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容