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