parseInt会自动跳过字符串开头的空白字符(空格、制表符、换行符、回车符等),再解析数字;但中间或末尾的空白会导致截断,纯空白或无效字符返回NaN,建议先trim再解析并指定进制。

parseInt 会自动跳过字符串开头的空白字符(空格、制表符、换行等),再开始解析数字,所以带空白的数字文本通常无需额外处理就能正确转换。
哪些空白会被自动忽略
parseInt 在解析前会调用内部的 trimStart 类似逻辑,跳过以下 Unicode 空白字符:
- 空格(U+0020)
- 制表符(\t,U+0009)
- 换行符(\n,U+000A)
- 回车符(\r,U+000D)
- 垂直制表符、换页符等(较少见)
实际例子:空白不影响解析结果
这些写法都能得到 42:
parseInt(" 42")-
parseInt("\t\n42abc")→ 解析到 42 就停,返回 42 -
parseInt(" -17.8")→ 返回 -17(小数点不是十进制有效字符,截断)
要注意的边界情况
虽然开头空白安全,但以下情形容易出错:
立即学习“Java免费学习笔记(深入)”;
- 空白在中间或末尾:
parseInt("12 34")→ 只取 12(遇到空格停止) - 纯空白字符串:
parseInt(" ")→ 返回 NaN - 只有空白加非数字:
parseInt(" \t xyz")→ 返回 NaN - 使用了进制但字符串含非法前缀:
parseInt(" 0x1F", 10)→ 按十进制解析,0x1F 不合法,返回 0(不是 NaN)
建议做法
为提升可读性和健壮性,推荐先显式清理再解析:
- 用
str.trim()去首尾空白,再传给parseInt - 检查结果是否为
NaN(isNaN(parseInt(str.trim()))或更稳妥地用Number.isNaN()) - 明确指定进制,如
parseInt(str.trim(), 10),避免八进制意外解析(尤其以 0 开头的旧版行为)


















