关于NaN isNaN Number、parseInt/parseFloat的整理汇总
来源:互联网 发布:东珈网络精英 编辑:程序博客网 时间:2024/05/17 03:59
NaN
JavaScript中有一个特殊的对象:NaN
,它表示一个非法的数字(Not-a-Number)。这个对象十分特殊,它的类型是number
,属于原始值,但是和自身不相等。即NaN === NaN
返回false
。
NaN和自身不相等,乍一看违反直觉,但却符合IEEE754的规定。IEEE754的委员会成员曾经解释过将NaN设计为不等的权衡。
isNaN
由于NaN
的特殊性,我们经常需要判断一个值是否为NaN,通常我们使用isNaN
来判断,例如:
isNaN(NaN); // trueisNaN(undefined); // trueisNaN({}); // trueisNaN(true); // falseisNaN(null); // falseisNaN(1); // false
如果说NaN
是JavaScript的一个坑的话,isNaN
就是另一个坑了。因为isNaN
会先将传递给它的对象转化为数字类型。而我们知道,对于普通的字符串,转化为数字类型会返回NaN
。于是就踩坑了。。。
isNaN("1"); // fales "1" 被转化为数字 1,因此返回falseisNaN("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(Number(test1)
+ "<br />");document.write(Number(test2)
+ "<br />");document.write(Number(test3)
+ "<br />");document.write(Number(test4)
+ "<br />");document.write(Number(test5)
+ "<br />");</script>
输出:
101256657776588999NaN
parseInt()
parseInt() 函数可解析一个字符串,并返回一个整数。返回解析后的数字。
说明
当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。
举例,如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。如果string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。如果string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
提示和注释
注释:只有字符串中的第一个数字会被返回。
注释:开头和结尾的空格是允许的。
提示:如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。
实例
在本例中,我们将使用 parseInt() 来解析不同的字符串:
parseInt("10");//返回 10parseInt("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>
输出:
101010.33346040NaN
- 关于NaN isNaN Number、parseInt/parseFloat的整理汇总
- js-----parseInt/parseFloat/isNaN
- parseInt(),parseFloat;isNaN()
- JS Lesson2 : Math()、parseInt()、parseFloat()、isNaN()、isInfinity()方法汇总
- Number()、parseInt()、parseFloat()的区别
- 整理一下关于parseInt 和parseFloat的理解
- js函数 Number()、parseInt()、parseFloat()的区别:
- js函数 Number()、parseInt()、parseFloat()的区别:
- js函数 Number()、parseInt()、parseFloat()的区别:
- js----Number()、parseInt()、parseFloat()的区别:
- Number()、parseInt()、parseFloat()转换规则
- ES6-数值的扩展-Number.parseInt(), Number.parseFloat()
- 数值转换 Number() parseInt() parseFloat()
- 详解js中Number()、parseInt()和parseFloat()的区别
- 详解JS中Number()、parseInt()和parseFloat()的区别
- js笔记:Number()、parseInt() 和 parseFloat() 的区别
- ES6利用Number.isNaN()更合理的判断NAN
- JavaScript中关于parseInt(),Number(),parseFloat()以及一元运算符“+”将字符串类型转换为数字类型的对比
- struts框架本质解析
- Azure RemoteApp(云桌面)的价值和优势
- Android providing resource
- 安装并配置samba
- jsp的内置对象
- 关于NaN isNaN Number、parseInt/parseFloat的整理汇总
- SQL中常用的函数
- maven的多环境配置
- STM32库函数中GPIO_Init的理解
- Vs2012+OpenCV 配置
- struts2数据校验方法
- 频率域图像增强
- 电脑高手常用的5个按钮!(太有用了!留下了!)
- Java核心技术第12章(1)