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