number数字类详解
整数、小数、负数、NaN都是number数字类型的
NaN:not a number ,但是它是数字类型的
isNaN:检测当前值是否 不是有效数字,返回true代表不是有效数字,返回false是有效数字
// 语法 isNaN ([value]) ; var num = 12; isNaN (num); // false 检测num变量存储的值是否为非有效数字 var str = '大神'; isNaN (str); //true 非有效数字 isNaN (true); //false 有效数字 isNaN (false); //false 有效数字 isNaN (null); //false 有效数字 isNaN (undefined); //true isNaN ({name:'lei'}); //true isNaN ([20、30]); //true isNaN ([20]) ; //false 有效数字 isNaN (/^$/) ; //true isNaN (function (){}); //true
isNaN检测的机制:
1、首先验证当前要检测的值是否为数字类型的,如果不是,浏览器会默认把值转换为数字类型的
2、当前检测的值已经是数字类型的,是有效数字返回false,不是返回true(数字类型中只有NaN不是有效数字,其余都是有效数字)
把非数字类型的值转换为数字:
1、基本数据类型转换为数字:直接使用Number这个方法转换的
/字符串转数字**/ Number ('13'); //13 Number ('13.5'); //13.5 Number ('13.5.5'); //NaN 如果当前字符串中出现任意一个非有效数字字符,结果为NaN Number ('13px'); //NaN /*布尔转数字*/ Number (true); //1 Number (false); //0 /*其他*/ Number (null) ;//0 Number (undefined); //NaN
2、引用数据类型转换为数字:先把引用值调用toString转换为字符串,然后再把字符串调取Number转换为数字
({}).toString() ; // '[object Object]' Number ('[object Object]') ;//NaN ([20,30]).toString() ; // '20,30' Number ( '20,30'); // NaN
([20]).toString();//'20'
Number('20');//20
isNaN(20);//false
/*特殊情况*/ ([]).toString () ;// ' ' Number('');// 0 isNaN([]); //false ,因为 [] 先toString 为 空字符串,空字符串再转数字为0,0是有效数字
parseInt / parseFloat 等同于Number ,也是把其他类型转换为数字类型
和Number区别在于字符串转换分析上
Number:出现任意非有效数字字符,结果为NaN
paeseInt:把一个字符串中的整数部分解析出来
paseFloat:把一个字符串中的小数(浮点数)部分解析出来
parseInt('13.5px'); //13 parseFloat('13.5px');//13.5 parseInt('w:13.5px');//NaN 一旦遇到非有效数字字符,结束查找
NaN的比较
NaN和谁都不相等,包括它自己
NaN == NaN ;// false
思考题:有一个变量num,存储的值不知道,想检测它是否是一个有效数字,下面方案是否可以?
if(Number (num )== NaN){ alert('num不是有效数字'); }
if(isNaN(num)){
alert('num不是有效数字');
}
答案肯定是第二种了,因为NaN不等于NaN,条件不可能成了
也只有isNaN是能检测当前值是否为有效数字了,true非有效数字,false是有效数字