数据类型-数字 Number-NaN

定义

NaN是JavaScript的特殊值,表示“非数字”(Not a Number)

规则

NaN不是数字,但是它的数据类型是数字

typeof NaN;    //number

NaN是JavaScript之中唯一不等于自身的值,不等于任何值,包括它本身

NaN == NaN;     //false
NaN === NaN;    //false

NaN在布尔运算时被当作false

Boolean(NaN);    //false

NaN与任何数(包括它自己)的运算,得到的都是NaN

NaN + 32    //NaN
NaN - 32    //NaN
NaN * 32    //NaN
NaN / 32    //NaN

由于数组的indexOf方法,内部使用的是严格相等运算符,所以该方法对NaN不成立

[NaN].indexOf(NaN)    //-1  检索的字符串值没有出现,则该方法返回-1


何时出现

当运算失败或者运算无法返回正确的数值时,就会返回NaN

5 - 'x'    //NaN
0 / 0    //NaN

一些数学函数的运算结果会出现NaN

Math.acos(2)    //NaN
Math.log(-1)    //NaN
Math.sqrt(-1)    //NaN


判断NaN的方法

isNaN()

原理

isNaN()会将括号内的参数利用Number()进行一次转换

如果转换得到的结果NaN → 返回true
如果结果不为NaN → 返回false

示例

由于会对参数用Number()进行一次数据转换,故对于字符串、部分对象、部分数组、undefined等,isNaN()会返回true

isNaN('NaN');      //true    等同于isNaN(Number('NaN'));
isNaN({});         //true    等同于isNaN(Number({}));
isNaN(['xzy']);    //true    等同于isNaN(Number(['xzy']));
isNaN(undefined);  //true    等同于isNaN(Number(undefined));    Number(undefined)的结果为NaN

但是,对于空数组、只有一个数值成员的数组、null等,isNaN()返回false

isNaN([]);        //false
isNaN([123]);     //false
isNaN(['123']);   //false
isNaN(null);      //false    Number(null)的结果为0
如何使用

使用isNaN之前,最好判断一下数据类型

function myIsNaN(value){
    return typeof value === 'number' && isNaN(value);
}


Number.isNaN()

与全局函数isNaN()相比,该方法不会强制将参数转换成数字,只有在参数是真正的数字类型,且值为 NaN
的时候才会返回 true

Number.isNaN('NaN');      //false
Number.isNaN({});         //false
Number.isNaN(undefined);  //false
Number.isNaN(null);       //false


利用自身不等特性

利用NaN是JavaScript之中唯一不等于自身的值这个特点,进行判断

function myIsNaN(value){
    return value !== value;
}

你可能感兴趣的:(数据类型-数字 Number-NaN)