Number parseInt parseFloat
这三种方法都可以将值转为数字,但处理方式各不相同
Number
Number(value)
- value 任意值,如果无法转为数字,则返回NaN
如果传入对象,会先调用对象的valueOf方法.如果valueOf的返回值不是基本类型,再调用对象的toString方法
1 | var o = {}; |
注 一元加操作符的转换方式和Number相同
parseInt
接受字符串,返回整数
parseInt(string, radix)
- string 字符串,如果传入参数不是字符串(包括数字),则先使用toString将其转为字符串.
- radix 参数string的基数,接受以下数值:
- 0或未指定: 0x开头字符串以16进制解析,其他字符串以10进制解析
- 2~36: 将字符串以2~36进制解析
1 | parseInt('0x11') // 17 |
如果string的第一个非空格字符"不是正/负号或数字",则返回NaN
1 | parseInt('.11') // NaN |
parseInt不支持科学计数法,会将"Infinity"和"e表示法"当作普通字符处理
1 | parseInt('Infinity') // NaN |
parseFloat
接受字符串,返回浮点数
parseFloat(string)
- string 字符串,如果传入参数不是字符串(包括数字),则先使用toString将其转为字符串
只解析10进制格式的字符串,16进制始终被转为0
1 | parseFloat('0x11') // 0 |
如果string的第一个非空格字符"不是正/负号或数字",则返回NaN
不过parseFloat能解析".1",而parseInt不能.
1 | parseFloat('.') // NaN |
注 这三种方法都会自动忽略字符前后空格
对照表
参数 | Number | parseInt | parseFloat |
---|---|---|---|
不传入参数 | 0 | NaN | NaN |
null | 0 | NaN | NaN |
undefined | NaN | NaN | NaN |
true | 1 | NaN | NaN |
false | 0 | NaN | NaN |
NaN | NaN | NaN | NaN |
Infinity | Infinity | NaN | Infinity |
-Infinity | -Infinity | NaN | -Infinity |
11 | 11 | 11 | 11 |
011 | 9 | 9 | 9 |
0b11 | 3 | 3 | 3 |
0x11 | 17 | 17 | 17 |
11e-7 | 0.0000011 | 0 | 0.0000011 |
1e-7 | 1e-7 | 1 | 1e-7 |
0.0000001 | 1e-7 | 1 | 1e-7 |
'' | 0 | NaN | NaN |
'a' | NaN | NaN | NaN |
'11a' | NaN | 11 | 11 |
'11' | 11 | 11 | 11 |
' 11' | 11 | 11 | 11 |
'011' | 11 | 11 | 11 |
'11.0' | 11 | 11 | 11 |
'11.' | 11 | 11 | 11 |
'0.11' | 0.11 | 0 | 0.11 |
'.11' | 0.11 | NaN | 0.11 |
'0b11' | 3 | 0 | 0 |
'0o11' | 9 | 0 | 0 |
'0x11' | 17 | 17 | 0 |
'0c11' | NaN | 0 | 0 |
'11e2' | 1100 | 11 | 1100 |
'11e-2' | 0.11 | 11 | 0.11 |
'11e-7' | 0.0000011 | 11 | 0.0000011 |
'1e-7' | 1e-7 | 1 | 1e-7 |
'0.0000001' | 1e-7 | 0 | 1e-7 |
'Infinity' | Infinity | NaN | Infinity |
'-Infinity' | -Infinity | NaN | -Infinity |
{} | NaN | NaN | NaN |
{a: 11} | NaN | NaN | NaN |
[] | 0 | NaN | NaN |
[11] | 11 | 11 | 11 |
[[11]] | 11 | 11 | 11 |
[11, 11] | NaN | 11 | 11 |