1. Number parseInt parseFloat
    1. Number
    2. parseInt
    3. parseFloat
    4. 对照表

JavaScript Number

Number parseInt parseFloat

这三种方法都可以将值转为数字,但处理方式各不相同

Number

Number(value)

  • value 任意值,如果无法转为数字,则返回NaN

如果传入对象,会先调用对象的valueOf方法.如果valueOf的返回值不是基本类型,再调用对象的toString方法

1
2
3
4
5
6
7
var o = {};
o.valueOf = function(){return 11};
console.log( Number(o) ) // 11

var o1 = {};
o1.toString = function(){return 11};
console.log( Number(o1) );

注 一元加操作符的转换方式和Number相同

parseInt

接受字符串,返回整数
parseInt(string, radix)

  • string 字符串,如果传入参数不是字符串(包括数字),则先使用toString将其转为字符串.
  • radix 参数string的基数,接受以下数值:
    • 0或未指定: 0x开头字符串以16进制解析,其他字符串以10进制解析
    • 2~36: 将字符串以2~36进制解析
1
2
3
4
5
6
parseInt('0x11') // 17
parseInt('0X11') // 17
parseInt('11',2) // 3
parseInt('11', 16) // 17
// 第二个参数传入0/2~36之外的数值会返回NaN
parseInt('11', 1) // NaN

如果string的第一个非空格字符"不是正/负号或数字",则返回NaN

1
parseInt('.11') // NaN

parseInt不支持科学计数法,会将"Infinity"和"e表示法"当作普通字符处理

1
2
3
4
5
6
7
8
9
parseInt('Infinity') // NaN
parseInt(0.0000001) // 1
// 实际运行过程
// 先调用toString方法转为字符串.
// 0.0000001小数点后有6个以上的0,因此自动转为科学计数法格式
var s = (0.0000001).toString(); // "1e-7"
// parseInt不支持科学计数法,e及后边的数字被自动忽略了,因此返回1
parseInt(s); // 1
// Number和ParseFloat没有这种问题

parseFloat

接受字符串,返回浮点数
parseFloat(string)

  • string 字符串,如果传入参数不是字符串(包括数字),则先使用toString将其转为字符串

只解析10进制格式的字符串,16进制始终被转为0

1
2
parseFloat('0x11') // 0
parseInt('0x11') // 17

如果string的第一个非空格字符"不是正/负号或数字",则返回NaN
不过parseFloat能解析".1",而parseInt不能.

1
2
parseFloat('.') // NaN
parseFloat('.1') // 0.1

注 这三种方法都会自动忽略字符前后空格

对照表

参数 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