為什麼 NaN 不等於自身?

發表於2016-03-17

NaN 即 Not a Number , 不是一個數字, 那麼NaN到底是什麼呢? 話說在JavaScript中,有6大資料型別,分別包括string,number,boolean,undefined,null和object, 而對於JS來說,整數和浮點數都統稱為number型別,除此之外,number型別還有一個很特殊的值,即NaN, 它是用來表示是否屬於number型別的一種狀態: 是或否。而不是一個確切的值。 

 

那麼,NaN值一般會在什麼情況下出現呢?一般有兩種情況:

(1) 一個表示式中如果有減號(-)、乘號(*) 或 除號(/) 等運算子時,JS引擎會在計算之前試圖將運算子兩邊的變數轉化為number型別,如果轉化失敗,表示式將返回NaN

(2) 直接使用 parseInt, parseFloat 或 Number 將一個非數字的值轉化為數字時,表示式返回NaN

當一個表示式返回了NaN 時,表示該表示式中存在不可以轉化的變數,並返回了無效的結果,並不是返回了一個確切的值。

如果非要說NaN是一個值得話,那麼 NaN 就是除過數字的任意值,但絕不是確切的某一個值!

如果你還不理解,我們還可以用正規表示式來描述NaN值: [^d]

所以 NaN != NaN , 因為它是一個範圍,而不能代表一個確定的值

 

除此之外,與NaN相關的還有一個函式,即 isNaN() , 它是用來判斷某一個變數是不是數字或能否轉化為數字,僅此而已。

 

有的朋友可能對NaN理解有偏差,想不明白下面這個問題:

於是就覺得isNaN()不靠譜,然後自己封裝函式來判斷一個變數是否真正為NaN, 你想想, NaN連自身都不認,你指望它和誰相等?

 

說到這裡,有的朋友是不是想起了undefined和null, 好不容易理解 NaN 是怎麼回事,此時此刻,有木有覺得越來越不懂undefined和null了, 那我就順便聊一下他們吧~

undefined是JavaScript中6種資料型別中的一種,該型別只有一個值,也就是undefined。 undefined意為未定義,即當使用var宣告瞭變數但未進行賦值時,這個變數的值就是undefined。undefined產生的原因有兩種:

(1)訪問物件不存在的屬性或方法

(2)宣告瞭變數但從未賦值

和NaN不同的是,undefined雖然也代表變數的一個狀態,但這個狀態值是確定唯一的,即當一個變數宣告瞭但沒有賦值時,它的狀態就是undefined,因此下面表示式是成立的:

理解了undefined以後,再理解null就容易多了,null型別也只有一個值:null , 表示一個變數中沒有包含有效資料。null在這裡意為空值空物件的意思,更確切的說,一個被賦值為null的變數沒有儲存有效的數值、字串、布林、陣列或物件等,可以通過給一個變數賦值為null來清空變數中的內容。產生null的原因只有一個:即對一個變數顯式的賦值為null 。

還是和NaN來比較,null也是一個確定切唯一的狀態值,當一個變數被賦值為null時,那麼它就和null相等,因此下面表示式也是成立的:

 

(關於JS資料型別更多講解請參考:http://www.cnblogs.com/onepixel/p/5140944.html )

相關文章