parseInt

parseInt 将字符串解析为整数,第二个参数 radix 指定进制(2~36),radix=0 时按十进制自动推断。

#type / concept #status / evergreen #resource / javascript #resource / ecmascript

[!info] related notes

parseInt

一句话定义

parseInt(string, radix) 将字符串解析为指定进制的整数,忽略尾部非数字字符。

签名

parseInt(string)
parseInt(string, radix)
参数类型含义
stringstring要解析的值(非 string 会先被转成 string)
radixnumber进制,范围 2 ~ 360 或省略时按十进制自动推断

返回值

返回解析出的整数。如果第一个非空格字符不能转成数字,返回 NaN

radix 行为详解

radix行为
0 或省略十进制(但字符串以 0x 开头则按十六进制)
2 ~ 36按指定进制解析
< 2> 36返回 NaN
1非法,返回 NaN
parseInt('10')        // 10(默认十进制)
parseInt('10', 0)     // 10(radix=0 等同省略)
parseInt('10', 2)     // 2(二进制 10 = 十进制 2)
parseInt('10', 8)     // 8(八进制 10 = 十进制 8)
parseInt('10', 16)    // 16(十六进制 10 = 十进制 16)
parseInt('ff', 16)    // 255
parseInt('1', 1)      // NaN(radix 必须 >= 2)
parseInt('1', 37)     // NaN(radix 必须 <= 36)

解析规则

从字符串开头开始读,跳过前导空格,遇到第一个不能作为该进制数字的字符就停止:

parseInt('  123abc')   // 123(忽略前导空格,读到 a 停止)
parseInt('abc123')     // NaN(开头就不是数字)
parseInt('0x10')       // 16(自动识别十六进制前缀)
parseInt('010', 10)    // 10(指定十进制,不按八进制处理)

与其他转换方式对比

方式'123''123abc'' 45 ''abc'null
parseInt(s)12312345NaNNaN
Number(s)123NaN45NaN0
+s123NaN45NaN0
parseFloat(s)12312345NaNNaN

关键区别:parseInt 会忽略尾部非数字字符('123abc' → 123),Number 不会('123abc' → NaN)。

经典陷阱:map(parseInt)

详见 higher-order-function-callback-mismatch

['1', '2', '3'].map(parseInt)
// parseInt('1', 0) → 1
// parseInt('2', 1) → NaN
// parseInt('3', 2) → NaN
// 结果:[1, NaN, NaN]

原因:map 会传 (value, index)index 被误当作 radix

正确用法

// 显式指定 radix
parseInt('10', 10)    // 10

// 转整数的推荐方式
Math.trunc(Number('123.45'))  // 123
Number.parseInt('10', 10)     // 10(ES6 全局入口,等同 parseInt)

// map 中正确使用
['1', '2', '3'].map(x => parseInt(x, 10))  // [1, 2, 3]
['1', '2', '3'].map(Number)                 // [1, 2, 3]

参考

创建于 2026/4/1 更新于 2026/5/27