關於isNAN()函數內進行的莫名其妙的隱式轉換?!

 isNaN(X) 函數用於檢查其參數是不是非數字值。函數

  若是 x 是特殊的非數字值 NaN(或者能被轉換爲這樣的值 )返回的值就是 true。若是 x 是其餘值,則返回 false。spa

  首先,咱們先來了解一下什麼是NAN,NAN即note a number,NaN 屬性用於引用特殊的非數字值。而isNaN() 函數一般用於檢測 parseFloat() 和 parseInt() 的結果,以判斷它們表示的是不是合法的數字。固然也能夠用 isNaN() 函數來檢測算數錯誤,好比用 0 做除數的狀況。code

  可是在實際的工做中,使用isNAN()方法會出現一些難以解釋的現象,那是由於該方法運行中進行了「隱式轉換」,下面列出了一些案例;blog

 

isNaN(NaN); // true

isNaN(undefined); // true

isNaN({}); // true

isNaN(true);// false

isNaN(null); // false

isNaN(37); // false

// strings

isNaN("37"); // false: "37"、 「37」將轉換爲一個數字37,因此不是一個NAN;

isNaN("37.37"); // false: "37.37" 將被轉換爲 37.37 ,因此不是一個 NaN

isNaN("123ABC"); // true: 字符串「123ABC」parseInt("123ABC") 方法後爲 123,可是這裏是使用Number()方法, Number("123ABC")獲得的結果爲 NaN

isNaN(""); // false: 空字符串將被轉換爲數字0,它不是一個NAN,因此爲false

isNaN(" "); // false: 一個空格的字符串被轉換爲數字0,0不是一個NAN,因此爲false

// dates

isNaN(new Date()); // false

isNaN(new Date().toString()); // true // 這裏使用了toString()方法轉爲字符串,因此很是確定的得出它是一個NAN;

isNaN("blabla") // true: 字符串"blabla" 將被轉換爲一個number. // 解析爲數字失敗並返回NaN

   從上面的案例能夠看出,isNAN()方法括號內的內容若是是字符串數據類型,或者布爾類型,將會使用Number()方法轉換數字類型,若是轉換後爲NAN則返回true,反之則返回false;字符串

相關文章
相關標籤/搜索