isNaN(X) 函數用於檢查其參數是否是非數字值。
如果 x 是特殊的非數字值 NaN(或者能被轉換為這樣的值 )返回的值就是 true。如果 x 是其他值,則返回 false。
首先,我們先來了解一下什么是NAN,NAN即note a number,NaN 屬性用於引用特殊的非數字值。而isNaN() 函數通常用於檢測 parseFloat() 和 parseInt() 的結果,以判斷它們表示的是否是合法的數字。當然也可以用 isNaN() 函數來檢測算數錯誤,比如用 0 作除數的情況。
但是在實際的工作中,使用isNAN()方法會出現一些難以解釋的現象,那是因為該方法運行中進行了“隱式轉換”,下面列出了一些案例;
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;