首先献祭出一个例子图,便于快速区别三个方法:在JavaScript中,有三个方法可以把非数值转换成数值类型:
Number()
、parseInt()
和parseFloat()
。
Number()
:可以用于任何数据类型;
parseInt()
/parseFloat()
:主要针对把字符串转换成数值。
他们有相通之处,但也有不同之处。此处做一个整理,方便查阅。
Number() 的转换规则
数据类型 | 规则 |
---|---|
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 |
parseInt() / parseFloat() 的转换规则
因为Number()
方法转换字符串的时候比较复杂,所以一般处理字符串比较常用的是parseInt()
/ parseFloat()
。
parseInt()
的转换规则是:
逐个解析字符串的字符,忽略前面空格,找到第一个非空格字符;若第一个字符不是数字字符或者负号,返回NaN;若第一个字符是数组字符,就继续解析第二个字符,直到解析完所有后续字符串或者遇到了一个非数字字符。
parseFloat()
的转换规则和parseInt()
类似,区别在于parseFloat()
能识别第一次出现的小数点。
parseInt() 方法还有基模式,可以把二进制、八进制、十六进制或其他任何进制的字符串转换成整数。
(注意parseFloat()没有基模式)。
var num2 = parseInt("AF"); //NaN
var num1 = parseInt("AF",16); //175 (按照十六进制解析)
var num3 = parseInt("10",2); //2 (按照二进制解析)
var num4 = parseInt("sdasdad"); //NaN
以上。