NaN, isNaN, Number.isNaN

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



猜你喜欢

转载自blog.csdn.net/jerny2017/article/details/80416088