JavaScript中如何嚴格的判斷NaN

參考文章:http://www.jb51.net/article/31355.htm

1.問題

在FreeCodeCamp上碰到這樣一道題:

刪除數組中的所有假值。

在JavaScript中,假值有false、null、0、”“、undefined 和 NaN。

false、null、0、”“、undefined都很好判斷,直接使用===即可
但是NaN是不能使用===的

> NaN === NaN;
false  //永遠返回false

如果不能使用 === 來檢測NaN,那該使用什麼呢?

2.isNaN函數(存在問題)

JS中有一個全局函數isNaN(),但這個函數有一個問題,它總會隱式的將參數中的值轉換成數字再做判斷,這樣就在判斷很多明顯不是NaN的值的時候也返回了true:

> isNaN("foo") 
true 

任意的字符串使用isNaN都會返回true,這樣就無法判斷真正的isNaN了

3.解決方案

  • 利用NaN是唯一一個與自身嚴格不相等的值:
function myIsNaN(value) { 
    return value !== value; 
} 
  • 在使用isNaN()之前先檢查一下這個值是不是數字類型,這樣就避免了隱式轉換的問題:
function myIsNaN2(value) { 
    return typeof value === 'number' && isNaN(value); 
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章