1. 程式人生 > >JavaScript高階程式設計第三版學習筆記(一)之資料型別區分詳談

JavaScript高階程式設計第三版學習筆記(一)之資料型別區分詳談

  null、NaN、undefined三者的區別是什麼?

  在初次接觸到JavaScript的時候,傻傻的分不清null、NaN、undefined三者到底區別何在,在實際的專案開發中也因為這個問題而困惑久矣。針對這個問題,我特意查找了多方資料,在筆記本上做了詳細的分析記錄,但是由於紙質資料不便於攜帶、不便於後期檢視。所以特此將筆記搬至部落格園上,如有表述不正確的地方,希望大家能夠給予意見,謝謝!

  1.資料型別

   ECMAScript中定義了5中簡單的資料型別(也稱為基本資料型別):Undefined、Null、Boolean、Number和 String。

  2.Undefined

  undefined是一個表示“無”的原始值或者表示“缺少值”,就是此處應該有一個值,但是未定義。當場嘗試讀取時就會返回undefined;例如變數被聲明瞭但是沒有賦值,就等於undefined。請看下邊兩個例子:

 

  

   這個例子只是聲明瞭變數,但是未對其進行初始化。比較這個變數與undefined字面量,結果返回未true,表明他們是相等的。

  再看這個例子:

 

  這個例子將值undefined初始化了變數message,實際上等價於上述第一個例子的效果。但是我們根本不需要做這樣子的操作,因為未經過定義的值預設就會取得undefined值,在這裡進行這樣的操作只是為了向大家詳細地進行基礎知識點的講解以便於更好的理解。不過,包含undefined的值和尚未定義的變數還是不一樣的。請看下邊這個例子:

 

  執行上述程式碼就會發現,第一個彈框就會顯示message的值“undefined”,而執行第二個alert彈框時,控制檯會報錯:'age' is not defined。但是如果用typeof分別檢測聲明瞭的變數和未宣告的變數,結果竟然都是“undefined”,來看看下邊這個例子:

  

  結果表明。對未初始化和未宣告的變數執行typeof操作符否反悔了undefined的值。

 

  3.Null

  Null表示一個空物件指標,換句話說,就是一個物件被定義了,但是值為“空值”,當用typeof操作符檢測null值時,返回“objec”的原因也歸咎於此。如下面的例子所示:

    

  實際上undefined值時派生自null值的,所以他們的對等效能測試返回的是true:

 

  但是需要注意的是,對等效能測試雖然返回的是true,但無論在什麼情況下都沒有必要把一個變數的值顯示設定為undefined,可是同樣的規則對於null則不適用。換句話說,只要意在儲存物件的變數還沒有真正的儲存物件,就應該明確地讓該變數儲存null值。這樣做不僅可以體現null作為空物件指標的慣例,而且也有助於進一步區分null和nudefined。在自我學習的過程中,關於null讓我感受最深的地方就是在閉包的應用中。大家都知道,閉包在給我們開發帶來方便的同時,也埋下了一些隱患,比如記憶體消耗,記憶體洩漏的問題,那麼如何解決這個問題呢?在閉包使用結束後釋放掉閉包裡的東西就可以了。那到底如何來釋放呢?此時,我們就需要手動設定函式的引用為null,這也是我認為可以體現null作用的一點。

  4.NaN

  NaN(Not a number)表示的是嘗試將一個非number的字面量、變數或者表示式轉換為數字的時候返回的值。

  該值有兩個特點,一是任何涉及NaN的操作都會返回NaN,比如NaN/10;二是NaN與任何值都不相等,包括NaN本身。

  因此,ECMAScript定義了isNaN()函式。該函式只接受一個任意型別引數。isNaN()在接收到一個值之後,會嘗試將這個值轉化為數值,那麼此時就有兩種情況,如果傳入的引數是一些不是數值的值,那麼就會被轉化為數值,比如字串“100”或Blooean值;如果傳入的是引數是一些不能被轉化為數值的值都會導致這個函式返回true。請看下邊的例子:

  

  上述例子分別測試了5個不同的值。第一個測試的是NaN自身,那麼必然返回的結果是true;第二個測試的是數值100,本來100就是數字,那麼必然返回的結果是false;第三個測試的是字串“100”,字串“100”可以被轉換為數字100,那麼那麼必然返回的結果是false;第四個測試的是非數字的字串,該字串不能被轉換為數字,那麼必然返回的結果就是true;最後一個測試的是Boolean,因為在Boolean中,true被轉換為數字1,false被轉換為數值0.那麼必然返回的結果是false。

  5.總結

  在詳細地分析完三種資料型別之後,現在我們來做一個總結:

  a. null表示一個物件被定義了,值為“空值”;

  b. undefined表示當一個變數已經申明,但是為賦值時返回的值;如果是未宣告的變數直接帶入表示式,則會產生未定義的報錯;

  c. NaN表示的是嘗試將非number的字面量、變數和表示式轉換為數字的時候返回的值;

  d. 注意:在驗證null時, 一定要使用===, 因為==無法分別null和undefined。