博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript Number类型常见迷惑点
阅读量:5206 次
发布时间:2019-06-14

本文共 2184 字,大约阅读时间需要 7 分钟。

1:NaN(Not a Number)

表示一个本来要返回数值的操作数没有返回数值的情况。在ECMAscript中,任何数除以0会返回NaN【ps:实际上只有0/0会返回NaN】,正(负)数除以0会返回Infinity(-infinity)。

NaN本身有两个非同寻常的特点,1、任何涉及NaN的操作(如:NaN/10)都会返回NaN,2、NaN与任何值都不想等包括NaN本身。

1 console.log(NaN == NaN);2 console.log(NaN === NaN);3 #results4 //false5 //false

2、isNaN()函数

ECMAScript定义了isNaN()函数,函数接受一个参数,该参数可以是任何类型,用于判断传入的参数是否是“不是数值“。

1 console.log(isNaN(NaN)); 2 console.log(isNaN("10")); 3 console.log(isNaN(20)); 4 console.log(isNaN("blue")); 5 console.log(isNaN(true)); 6 #results 7 //true 8 //false 9 //false10 //true11 //false

3、数值转换

有3个函数可以将不是非数值转换为数值:Number()、parseInt()、parseFloat()。

   Number():

   转型函数Number()可以用于任何数据类型

   Number()函数转换规则:

   a.如果是数字值,就简单转入和返回;

   b.如果是Boolean类型,true和false分别返回1和0;

   c.如果是null值,返回0;

   d.如果是undefined,返回NaN;

   e.如果是字符串,遵循下列规则:

            如果字符串只包含数字,则直接转换成十进制数值。(如果数字前有0会被忽略,如”0123“转换成123)。

            如果字符串中包含有效的浮点数形式,将其转换成对应的浮点数值(前导0依然会被忽略)。

            如果字符串中包含有效的十六进制格式,将其转换为相同大小的十进制整数值。

            如果字符串为空(即不包含任何字符),则转换成0。

            如果字符串是包含除上述格式以外的其他格式,则转换为NaN。

1 console.log(Number("0x10"));2 console.log(Number("10abc"));3 console.log(Number(" "));4 #results5 //166 //NaN7 //0

    f.如果是对象,先调用对象的valueOf()方法,然后按照前面的规则返回,如果返回结果为NaN,则再调用对象的toString()方法,再按照前面的规则转换返回的字符串值。

另外两个函数则专门用于把字符串转换成数值,这3个函数对于同样的输入可能会有不同的返回结果。

     parseInt():

     parseInt()函数在转换字符串是,更多的是看其是否符合数字模式。它会忽略字符串前面的空白字符,直到找到第一个非空白字符;如果第一个字符不是数字或者负号,parseInt()会返回NaN,也就是说parseInt()转换空白字符会返回NaN(与Number()不同),parseFloat()也返回NaN。如果第一个是数字字符,parseInt()会继续解析直到最后一个字符或者遇到了一个非字符。

1 console.log(parseInt("10abc"));2 console.log(parseInt(" "));3 console.log(parseInt("0xA"));4 #results5 //106 //NaN7 //10

    注意:ECMAScript 5 JavaScript引擎中,parseInt()不具备解析八进制的能力,parseInt('070')输出70!如果需要让parseInt()函数将传入的字符串转换为指定进制的数,可以为其传入第二个参数:转换时使用的技术(即多少进制)。不指定基数意味着让parseInt()自己决定如何让解析字符串,所以为了避免错误的解析,建议无论什么情况下都明确指定基数。

1 console.log(parseInt("AF",16));2 console.log(parseInt("10",10));3 console.log(parseInt("10",10));4 #results5 //1756 //107 //8

     parseFloat()函数与parseInt()函数类似,从第一个字符开始解析,一直到字符串末尾或者直到遇见第一个无效的浮点数字字符为止,解析时第一个小数点有效,第二个小数点无效。parseFloat()函数与parseInt()函数除小数点的区别外,第二个区别在于它始终会忽略前导的0,也就是说parseFloat()在解析十六进制数时会返回0.

1 console.log(parseFloat("22.23.2"));2 console.log(parseFloat("0x10"));3 #results4 // 22.235 // 0

 

转载于:https://www.cnblogs.com/wymninja/p/5726715.html

你可能感兴趣的文章
中文系统 上传file的input显示英文
查看>>
css样式写一个三角形
查看>>
比callback更简洁的链式执行promise
查看>>
android permission
查看>>
javascript获取textarea中所选文本的开始位置、结束位置和选择的文本
查看>>
【译】在Asp.Net中操作PDF - iTextSharp - 使用字体
查看>>
事务备份还原分离附加
查看>>
JSch - Java实现的SFTP(文件上传详解篇)
查看>>
一些注意点
查看>>
.net 文本框只允许输入XX,(正则表达式)
查看>>
C#修饰符
查看>>
20.核心初始化之异常向量表
查看>>
[BSGS][哈希]luogu P3846 可爱的质数
查看>>
Python 第四十五章 MySQL 内容回顾
查看>>
iostat参数说明
查看>>
js 封装获取元素的第一个元素
查看>>
iOS 获取Home键指纹验证
查看>>
Python-Mac 安装 PyQt4
查看>>
P2571 [SCOI2010]传送带
查看>>
哈希表1
查看>>