NaN(Not a Number) 顧名思義就是非數字
typeof NaN // Number
NaN
不等於任何值,也不等於自己NaN === NaN // false
備註:在 IEEE 754 的規範中就有定義如果判斷式遇到 NaN
就要回傳 false
會出現 NaN
的情境:
Infinity
做「除法」或「減法」運算:因為 Infinity
本身為大到無法表示的值,因此針對 Infinity
做加減乘除是沒有意義的
Inifinity + Infinity
=> 回傳 InfinityInifinity - Infinity
=> 回傳 NaNInifinity * Infinity
=> 回傳 InfinityInifinity / Infinity
=> 回傳 NaNNaN
透過以下兩種方法來偵測資料是否為 NaN:
當 value 為 NaN、String 或 Object 時,會回傳 true。
Number.isNaN
vs. global isNaN
29.1 Use
Number.isNaN
instead of globalisNaN
@ airbnb validate number @ 30 seconds of code
使用 isNaN
一開始會做 Number()
的數值轉換,假如遇到的是空字串或 Boolean 很可能會因為先做數值轉換的關係產生非預期的最終結果。
因此建議使用 Number.isNaN()
(不會進行 Number()
的數值轉換)的方式來進行判斷。
一般正常的變數自己等於自己一定會是 true,只有 NaN === NaN
會是 false。
也就是說,當一個變數自己等於自己是 false 的話,就可以推斷這個變數一定是 NaN 。