JavaScript:undefined And null區別,undefinednull

來源:互聯網
上載者:User

JavaScript:undefined And null區別,undefinednull

    下班吃飯的時候,同事偶然問了一個問題:undefined和null到底有什麼區別?無法回答,回去查閱相關資料,算了有了一個瞭解,做相關的總結,在開始之前,請看如下代碼,算是拋出這個問題:

console.info(undefined == null);    //trueconsole.info(undefined === null);   //false

      上述結果可以給我們一個這樣的理解: undefined和null兩個值相等,但是他們含義不同。具體兩者有什麼區別,先理解下undefined和null在做分析。

undefined

       undefined類型只有一個值,即特殊的undefined。在使用var聲明變數但未對其加以初始化,這個變數的值就是undefined。例如:

//1、聲明變數,未指定值var var1;console.info(typeof varl);      //undefined//2、指定值為undefinedvar var2 = undefined;console.info(typeof var2);      //undefined

       上面兩種寫法是等價的,未經初始化的值預設就會取得undefined值。

      Tips:一般而言不需要顯示的把一個變數設定為undefined,undefined的主要目的在於比較,ECMA第三版引入這個值正是為了區分Null 物件指標null和未經初始化的變數

      既然談到了null,這裡在多補充一點,對為初始化的變數執行typeof返回undefined值,對為聲明的變數執行typeof也會返回undefined值,如下例子:

var var3;console.info(typeof var3);      //undefinedconsole.info(typeof var4);      //undefined

      這個結果有邏輯上的合理性,雖然null和undefined在技術角度上有本質區別,但是實際中不可能對兩種變數進行操作。在這種情況下如果我們習慣聲明變數就進行初始化的時候,當typeof操作符返回“undefined”值時,我們就知道有變數尚未被聲明,而不是尚未初始化。

null

      null類型也是只有一個值null,從邏輯角度來看,null值表示一個Null 物件指標,不信?看如下代碼就知道了:

var var5 = null;console.info(typeof var5);      //object

      所以在變數是用於儲存對象時,最後將之初始化為null,可以很方便的知道變數是否儲存了一個對象的引用。

區別

      分別的瞭解了這兩種類型,到這裡似乎有所理解,但又不具體。回到最初拋出的問題,在ECMAScript的原始類型中,是有undefined和null類型的,這兩種類型分別對應了屬於自己的唯一值undefined和null。undefined實際上是從null派生而來,這就可以解釋undefined==null為true了。

      就undefined===null為false分兩個方面來理解:

記憶體

      很顯然,他們的地址分配不一樣,我想著對於有後端基礎的同學來說很容易理解,具體如:

用途

       儘管undefined==null為true,但是他們的用途是不一樣的。就像前面所述,無論什麼情況都沒有必要將一個變數值顯示的指定為undefined,預設值為undefined,但是預設的規則對null卻不適用。因為null表示沒有指向對象的引用。

       總的來說,undefined派生於null,他們是“=="的,另一層面上undefined表示沒有賦值的基礎資料型別 (Elementary Data Type),null表示沒有賦值的引用資料類型,他們不能“===”。



javascript中null與undefined的不同?

用中文名詞來理解?
undefined 叫無中生有
null 叫豆腐腦
前者的意思是javascript解譯器不知道這是什麽東西,會拋出"未定義"的錯誤
後者的意思是你定義了它,但它沒有分配記憶體空間,無心肝不痛,不會拋出錯誤.
代碼:
v_kao; //會提示你v_kao沒定義
var v_kao; // 那麼v_kao的值就是null;

其實它們是兩個層面的東西,就比如一個物件,它有很多屬性,而其中一個屬性即值是null,
而是否有沒有這個物件才是undefined,比如:
美女 = {簡稱:'美人',升高:'1.80m',性別:null}
那麼我們說的"美女"就可以用"是否定義"來描述,它就是undefined
"美女的性別"則為null,是指我知道是什麽東西的情況下才關係它的性別,雖然是未知,但畢竟是一種結果,未知的表示就可以描述為null
 
在javascript中,nan, null與undefined的不同是什?

NaN:保留值(不是數字)
null:未定義或Null 字元串
undefined:對象屬性不存在,或,聲明了變數但從未賦值。

NaN很少直接使用,而是用isNaN(numValue)的形式來進行判斷,如果numValue是數字,那麼返回false,反之,返回true(即NaN)
另外兩個很常見,就不用解釋了吧?
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.