关于NaN isNaN Number、parseInt/parseFloat的整理汇总
2015-10-20 16:03
429 查看
NaN
JavaScript中有一个特殊的对象:NaN,它表示一个非法的数字(Not-a-Number)。这个对象十分特殊,它的类型是
number,属于原始值,但是和自身不相等。即
NaN === NaN返回
false。
NaN和自身不相等,乍一看违反直觉,但却符合IEEE754的规定。IEEE754的委员会成员曾经解释过将NaN设计为不等的权衡。
isNaN
由于NaN的特殊性,我们经常需要判断一个值是否为NaN,通常我们使用
isNaN来判断,例如:
isNaN(NaN); // true isNaN(undefined); // true isNaN({}); // true isNaN(true); // false isNaN(null); // false isNaN(1); // false
如果说
NaN是JavaScript的一个坑的话,
isNaN就是另一个坑了。因为
isNaN会先将传递给它的对象转化为数字类型。而我们知道,对于普通的字符串,转化为数字类型会返回
NaN。于是就踩坑了。。。
isNaN("1"); // fales "1" 被转化为数字 1,因此返回false isNaN("SegmentFault"); // true "SegmentFault" 被转化成数字 NaN
所以说,通常对字符串使用
isNaN方法会返回
true,
isNaN坑爹了——当然,
isNaN也许会辩驳说这不是它的坑,这是JavaScript强制类型转换的坑。
那么,可不可以不做类型转换直接判断呢?ES6用
Number.isNaN填上了这个坑。
Number.isNaN不会转换对象的类型。
Number.isNaN('SegmentFault'); // false
ES6的这个新特性,已经被NodeJS和部分浏览器所支持。
Number()
Number() 函数把对象的值转换为数字。返回值
如果参数是 Date 对象,Number() 返回从 1970 年 1 月 1 日至今的毫秒数。如果对象的值无法转换为数字,那么 Number() 函数返回 NaN。
实例
在本例中,我们将尝试把不同的对象转换为数字:<script type="text/javascript"> var test1= new Boolean(true); var test2= new Boolean(false); var test3= new Date(); var test4= new String("999"); var test5= new String("999 888"); document.write([code]Number(test1)+ "<br />");
document.write(
Number(test2)+ "<br />");
document.write(
Number(test3)+ "<br />");
document.write(
Number(test4)+ "<br />");
document.write(
Number(test5)+ "<br />");
</script>[/code]
输出:
1 0 1256657776588 999 NaN
parseInt()
parseInt() 函数可解析一个字符串,并返回一个整数。返回解析后的数字。
说明
当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。举例,如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。如果
string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。如果
string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
提示和注释
注释:只有字符串中的第一个数字会被返回。注释:开头和结尾的空格是允许的。
提示:如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。
实例
在本例中,我们将使用 parseInt() 来解析不同的字符串:parseInt("10"); //返回 10 parseInt("19",10); //返回 19 (10+9) parseInt("11",2); //返回 3 (2+1) parseInt("17",8); //返回 15 (8+7) parseInt("1f",16); //返回 31 (16+15) parseInt("010"); //未定:返回 10 或 8
parseFloat()
parseFloat() 函数可解析一个字符串,并返回一个浮点数。parseFloat 是全局函数,不属于任何对象。
parseFloat 将它的字符串参数解析成为浮点数并返回。如果在解析过程中遇到了正负号(+ 或 -)、数字 (0-9)、小数点,或者科学记数法中的指数(e 或 E)以外的字符,则它会忽略该字符以及之后的所有字符,返回当前已经解析到的浮点数。同时参数字符串首位的空白符会被忽略。
如果参数字符串的第一个字符不能被解析成为数字,则 parseFloat 返回 NaN。
提示:您可以通过调用 isNaN 函数来判断 parseFloat 的返回结果是否是 NaN。如果让 NaN 作为了任意数学运算的操作数,则运算结果必定也是 NaN。
返回值
返回解析后的数字。提示和注释
注释:开头和结尾的空格是允许的。提示:如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。
提示:如果只想解析数字的整数部分,请使用 parseInt() 方法。
实例
例子 1
在本例中,我们将使用 parseFloat() 来解析不同的字符串:<script type="text/javascript"> document.write(parseFloat("10")) document.write(parseFloat("10.00")) document.write(parseFloat("10.33")) document.write(parseFloat("34 45 66")) document.write(parseFloat(" 60 ")) document.write(parseFloat("40 years")) document.write(parseFloat("He was 40")) </script>
输出:
10 10 10.33 34 60 40 NaN
相关文章推荐
- Azure RemoteApp(云桌面)的价值和优势
- 安装并配置samba
- jsp的内置对象
- centos中g++编译c++II标准的程序
- swift 中使用weak self
- 修复MongoDB数据库,解决因Unclean Shutdown导致服务不能启动的问题
- maven的多环境配置
- mysql导入导出汇总
- 士兵杀敌(五)
- Smart Disk -- proposed by Liyuan Liu
- Android providing resource
- Android类-BroadcastReceiver
- in 和exists
- 设置文件的属性-chmod/chown/truncate/utime/umask
- ubuntu下安装nginx
- Makefile中使用定义空格变量,并对其查找替换
- leetcode -- Majority Element
- 北航上机测试准备 程序3
- 搜索接口-排序(Search API-sort)
- 转载blog_Linux下Tomcat日志定期清理 及 logrotate 配置