JavaScript - 数值类型的判断与常用转换方式
Posted 匠心莫负
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript - 数值类型的判断与常用转换方式相关的知识,希望对你有一定的参考价值。
主要参考:
- isNaN() - JavaScript | MDN
- Number.isNaN() - JavaScript | MDN
- parseInt() - JavaScript | MDN
- parseFloat() - JavaScript | MDN
数值类型的判断方法isNaN()和Number.isNaN()
可接受任意参数,用来判断其参数是否为NaN(not a number)
由于把NaN与任何值(包括其自身)相比得到的结果都是false,因此无法通过
==
或===
运算符来判断某个值是否为NaN,isNaN()
函数也就是必需的isNaN()与Number.isNaN()
直观的说,
isNaN()
是用来判断参数值是否为NaN,而Number.isNaN()
是用来判断参数值是否为Number.NaN(即还需要判断类型为Number);因此,
isNaN()
会将参数值强制转换(通过Number()
)为Number后再判断是否为NaN,而Number.isNaN()
仅判断当前参数值是否为NaN。综上,可有如下表示:
isNaN(x)
等价于Number.isNaN(Number(x))
Number()
参数可为任何类型数据,具体转换规则可大致划分如下:
数字值,只是简单的传入和返回(前导零存在时无论多少都将视为八进制数);
Number(123); // 123 Number(0123); // 83 Number(00123); // 83 Number(0x123); // 291
Boolean值,true和false将分别被转换为1和0;
Number(true); // 1 Number(false); // 0
null值,返回为0;
Number(null); // 0
undefined值,返回为NaN;
Number(undefined); // NaN
字符串,又主要区分以下情况:
字符串中只包含数字(可带正/负号),则(忽略前导零后)转换为十进制数值;
Number(‘123‘); // 123 Number(‘+123‘); // 123 Number(‘-123‘); // -123 Number(‘0123‘); // 123
字符串中包含有效浮点格式,则(忽略前导零后)将其转换为对应浮点数值;
Number(‘1.23‘); // 1.23 Number(‘01.23‘); // 1.23 Number(‘0.1.23‘); // NaN
字符串中包含有效十六进制格式,则将其转换为十进制数值;
Number(‘FFF‘); // NaN Number(‘0xFFF‘); // 4095
字符串为空(可包含多个空格符),都将转换为0;
Number(‘‘); // 0 Number(‘ ‘); // 0
字符串中包含除上述字符外的其他字符时,将返回NaN
对象,将先调用对象的
valueOf()
方法后再尝试转换其返回值,如结果仍为NaN,会继续调用对象toString()
方法并转换其返回值
parseInt()
parseInt()
是较于Number()
更为通用合理的解决方案
语法
parseInt(string[, radix])
string:将被解析的目标(被转换后的)字符串参数;
radix:(建议明确)标记参数string的数值转换基数。当该参数未使用,或值为undefined、0时,将遵循以下自动判断规则:
当字符串已“0x”/“0X”或“0”开头时将自动识别为十六进制或八进制(ECMAScript5中不支持识别为八进制,但各浏览器支持程度不一致);
parseInt("0xFF"); // 255 parseInt("0123"); // 10
当字符串起始位为其他值时,默认设定为10(十进制)
基本规则
前导/后置空格都将被忽略:
parseInt(" 123 "); // 123
识别参数至第一个非数字字符(包括小数点、正/负号等),仅截取前面数字部分,后续字符将被忽略:
parseInt("123ab"); // 123 parseInt("1+2"); // 1
当首字符不是数字字符或正/负号时,直接返回NaN:
parseInt("a123"); // NaN parseInt("-123"); // -123
parseFloat()
parseFloat()
相较于parseInt()
扩展了浮点数的解析能力
语法
parseFloat(value)
- value:唯一参数,即说明只可解析十进制参数,不可指定基数
扩展规则
区别于
parseInt()
解析到的第一个小数点有效:parseFloat("0.123"); // 0.123 parseFloat("0.1.23"); // 0.1
能够识别适用于科学记数法的e/E操作符:
parseFloat("3.14e-2"); // 0.0314 parseFloat("0.314E+2"); // 3.14
无法识别非十进制数字字符:
parseFloat("FF"); // NaN parseFloat("0xFF"); // 0
解析转换结果为整数时,将会直接返回整数:
parseFloat("5.00"); // 5
以上是关于JavaScript - 数值类型的判断与常用转换方式的主要内容,如果未能解决你的问题,请参考以下文章