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


 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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM