在JavaScript中,有三个方法可以把非数值转换成数值类型:
Number()
、parseInt()
和parseFloat()
。Number()
:可以用于任何数据类型;parseInt()
/parseFloat()
:主要针对把字符串转换成数值。 他们有相通之处,但也有不同之处。此处做一个整理,方便查阅。
首先献祭出一个例子图,便于快速区别三个方法:
例子图
数据类型 | 规则 |
---|---|
Boolean | true和false将分别被转换为1和0 |
Number | 直接的传入返回 |
Null | 返回0 |
Undefined | 返回NaN |
String | 遵循下列规则: 1. 只包含数字,将其转换为十进制数值: “1” -> 1,“123” ->123,“011” -> 11(忽略前导零);2. 只包含有效的浮点格式,将其转换为对应浮点数值: “1.1” -> 1.1,“03.14” ->3.14,“1.22.33” -> NaN; 3. 只包含有效的十六进制格式,将其转换为相同大小的十进制整数值:“0xf” -> 15; 4. 空字符串(不包含任何字符或包含空格等空字符),则将其转换为0:“” -> 0,“ ” -> 0; 5. 除以上提及格式的字符,则将其转换为NaN:“99 88” -> NaN,“99abc” -> NaN; |
Object | 代码测试时NaN,理论上还得查阅一番资料233 |
因为Number()
方法转换字符串的时候比较复杂,所以一般处理字符串比较常用的是parseInt()
/ parseFloat()
。
parseInt()
的转换规则是:
逐个解析字符串的字符,忽略前面空格,找到第一个非空格字符;若第一个字符不是数字字符或者负号,返回NaN;若第一个字符是数组字符,就继续解析第二个字符,直到解析完所有后续字符串或者遇到了一个非数字字符。
parseFloat()
的转换规则和parseInt()
类似,区别在于parseFloat()
能识别第一次出现的小数点。
(注意parseFloat()没有基模式)。
var num2 = parseInt("AF"); //NaN
var num1 = parseInt("AF",16); //175 (按照十六进制解析)
var num3 = parseInt("10",2); //2 (按照二进制解析)
var num4 = parseInt("sdasdad"); //NaN
以上。