isNaN的理解

小白發表於2018-06-26

相信有學過JavaScript的同學都對isNaN不會陌生,它的作用是判斷當前值是否能轉換為數字的重要工具。

在介紹isNaN函式前,我們先來說說NaN。

NaN

NaN(not a number)是Number的一個特殊數值。對它的定義其實非常奇怪,非數值,一個不是數字的數值。這個數值用來表示本來用來返回數字的操作未返回數字的情況。

NaN有這樣的特點:

  1. 所有數值型別除以/減去/乘以非數值型別,都返回NaN。
  2. NaN不等於任何值,包括自身。(NaN != NaN)

注:Boolean和Null能轉換成Number型別,所以能正確返回數字。

isNaN()

isNaN()接收一個引數,這個引數可以是任意型別。如果這個引數可以被轉換為Number型別,則返回false,否則返回true

  1. isNaN()的引數會被嘗試轉換為Number型別。
  2. 如果引數為[]``truefalsenull會被轉換為數字,結果返回false。

注:當傳入的引數為一個物件時,isNaN()會嘗試呼叫valueOf()方法,來判斷是否可以轉換為數值,如果不能,還會再呼叫toString()方法,來繼續判斷是否可以轉換為數值。