NaN: 是一個數據類型,屬於Number,從這個角度來說,Es6中給出了一個方法Number.isNaN, 只要不是NaN類型的都爲false,舉幾個例子:
Number.isNaN(NaN); // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0); // true
Number.isNaN('NaN'); // false
Number.isNaN(undefined); // false
Number.isNaN({}); // false
Number.isNaN('blabla'); // false
Number.isNaN([]) // false
Number.isNaN(true); //false
Number.isNaN(null); //false
Number.isNaN(37); //false
Number.isNaN('37'); //false
Number.isNaN('37.37'); //false
Number.isNaN(''); //false
Number.isNaN(' '); //false
但是,如果從NaN的全稱來說,not a number,判斷不是一個數字,Number.isNaN就不好用了,字符串‘aaa’確實不是一個數字啊,如果非要想用Number.isNaN(),讓它返回true,那麼就必須在加上一句:
var a = Number('aaa');
console.log(Number.isNaN(a)); // true
Number.isNaN()這個方法比較靈活,把判斷的權利交給用戶,如果想判斷一個值是否可以轉成數字,可以這樣寫:
返回true就是不能轉。
var a = parseInt('123aaa');
console.log(Number.isNaN(a)); // false
var a = parseFloat('123.12aa');
console.log(Number.isNaN(a));// false
對於全局方法isNaN()來說,可以直接判斷字符串是否是數字,isNaN依賴於Number()方法,如果Number()方法能轉成數字類型,那麼返回false。這個方法不穩定,慎用!
isNaN(NaN); // true
isNaN(undefined); // true
isNaN({}); // true
isNaN([]); //false
isNaN(true); // false
isNaN(null); // false
isNaN(37); // false
isNaN('37'); // false
isNaN('37.37'); // false
isNaN('123ABC'); // true
isNaN(''); // false
isNaN(' '); // false
isNaN(new Date()); // false
isNaN(new Date().toString()); // true
isNaN('blabla'); // true