NaN 概念及用法
- NaN 是一个什么?
- NAN 翻译过来及 not a number (不是一个数值) 这是一个特殊的属性, 这个数值表示本来要返回数值的操作数未返回数值的情况.
var box = 0/0 //NaN
var box = 12/0 //INfinity
var box=12/0*0 //NaN
可以通过Namber.NaN得到NaN 的值, 任何类型的值与NAN进行运算的结果都是NAN,NAN与自身是不等的即 NAN 不等于 NAN
console.log(Number.NaN) //NaN
console.log(NaN + 1) //NaN
console.log(NaN == NaN) //false
这些都是可以通过演示得出的
isNaN() 函数
什么是 isNaN() ? 带有小括号的即都为函数,这个函数可以翻译为 is not a number (是,这不是一个数值) .isNaN()函数在接收到一个值后,会尝试将这个值转换成数值 .
console.log(isNaN(NaN)); //true;
console.log(isNaN(25)); //false 25是个数值
console.log(isNaN('25')); //false '25'是一个字符串数值,可以转换成数值
console.log(isNaN('Lee')); //true 'Lee'是个字符串,不能转化成数值
console.log(isNaN(true)); //false true可以转换成1
isNaN()函数也适用于对象,在调用函数过程中,首先会调用valueOf()方法,然 后确定返回值是否能够转换成数值。如果不能,则基于这个返回值再调用 toString()方法, 再测试返回值
1 2 3 4 5 6
| var box={ toString:function(){ return 'lee'; } }; console.log(isNaN(box));
|
有三个函数可以把非数值转换成数值:Number()、parseInt()和parseFloat()。Number()是转换型函数,可以用于任何数据类型,而另外两个则专门用于把字符串转换成数值。
1 2 3 4
| console.log(Number(true)); //1,Boolean类型的true和false分别转换成1和0 console.log(Number(25)); //25,数值类型直接返回 console.log(Number(null)); //0,空对象返回0 console.log(Number(undefined));//NaN,undefined返回NaN
|
如果是对象,首先会调用valueOf()方法,然后确定返回值是否能够转化成数值。如果转化的结果是NaN,则基于这个返回值再调用toString()方法,在测试返回值。
1 2 3 4 5 6 7 8 9 10 11 12 13
| var box={ toString:function(){ return '123'; } }; console.log(Number(box)); //123
var box={ toString:function(){ return 'lee'; } }; console.log(Number(box)); //NaN
|
由于Number()函数在转换字符串时比较复杂且不够合理,因此在处理整数的时候更常用的是parseInt()。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| console.log(parseInt('465lee')); //465,返回整数部分 console.log(parseInt('lee465lee')); //NaN,如果第一个不是数值,就会返回NaN console.log(parseInt('12lee56lee')); //12,从第一个数值开始取,到最后一个连续数值结束 console.log(parseInt(56.12)); //56,小数点不是数值,会被去掉。 console.log(parseInt('')); //NaN,空返回NaN
parseInt()除了可以识别十进制数,开可以识别八进制和十六进制。 console.log(parseInt('0xA')); //10,十六进制 console.log(parseInt('070')); //56,八进制 console.log(parseInt('0xALee')); //100,十六进制,Lee被自动过滤
ECMAScript为parseInt()提供了第二参数,用于解决各种的进制转换。 console.log(parseInt('0xAF')); //175,十六进制 console.log(parseInt('AF',16)); //157,第二参数指定十六进制,可以去掉0x前导 console.log(parseInt('AF')); //NaN,这里看作字符串,理所当然Na console.log(parseInt('101010101',2)); //314,二进制转换 console.log(parseInt('70',8)); //56,八进制转换
parseFloat()是用于浮点数值的转换,和parseInt()一样,从第一位解析到浮点数值位置。 console.log(parseFloat('123Lee')); //123,去掉不能识别的部分 console.log(parseFloat('0xA')); //0,不认识十六进制 console.log(parseFloat('123.4.5')); //123.4,只认一个小数点 console.log(parseFloat('0123.400')); //123.4去掉前后导 console.log(parseFloat('1.234e7')); //12340000,把科学计数法转换成普通数值
|
上面也介绍了NaN是什么,也介绍了几个其他属性的方法,具体案例具体看待,上面只是介绍了几个案例,其实还是需要自己去琢磨的,加油!!!