parseint按指定进制提取字符串开头整数,需显式传radix;parsefloat提取浮点数,仅支持十进制,识别小数点和科学计数法;number更严格且不支持进制。

parseInt 和 parseFloat 是 JavaScript 中用于将字符串转为数字的两个基础函数,但它们行为不同、适用场景也不同。用错容易导致意外结果,比如截断小数、忽略前导空格或误读进制。
parseInt:按指定进制提取整数部分
它从字符串开头开始解析,直到遇到无法识别的字符为止,返回一个整数。默认按十进制解析,但强烈建议**显式传入第二个参数(radix)**,否则像 "08"、"09" 在旧环境可能被当成八进制(结果为 0)。
- 写法:
parseInt(str, radix),radix 常用 10(十进制)、16(十六进制)等 - 遇到空格会自动跳过,但遇到字母、小数点、+/- 号(非开头)就停止
- 示例:
parseInt(" 42px", 10)→ 42;parseInt("10.99", 10)→ 10;parseInt("0xFF", 16)→ 255 - 注意:
parseInt("2023-05-01")→ 2023(只取开头连续数字)
parseFloat:提取浮点数,不支持 radix 参数
它专门用于解析浮点数,能识别小数点、科学计数法(如 "1e3"),同样从开头解析直到非法字符。它**没有进制选项**,始终按十进制处理。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 写法:
parseFloat(str),只接受一个参数 - 支持带符号(+/-)、小数点、e/E 指数,但只认第一个小数点和第一个 e
- 示例:
parseFloat(" 3.1415abc")→ 3.1415;parseFloat("1e2")→ 100;parseFloat(".5")→ 0.5 - 注意:
parseFloat("0x10")→ 0("0x" 不是有效浮点格式,直接停在 x)
常见陷阱与替代建议
这两个函数对无效输入返回 NaN,但不会报错,容易掩盖问题。比如 parseInt("hello") 返回 NaN,参与运算会变成 NaN,难以调试。
- 检查结果是否有效:用
Number.isNaN(parseInt(str))或更稳妥的!isNaN()(注意 isNaN() 会强制转换) - 想严格转换且失败时抛错?考虑
Number(str):它更严格(" 42 "→42,"42px"→NaN),且不支持进制 - 需要保留小数位数?先用 parseFloat,再配合
toFixed()或Math.round()处理,不要依赖 parseInt 截小数 - 解析用户输入时,建议先
trim()再转换,避免空格干扰
简单对比总结
如果只要整数、且可能含进制(如颜色值、二进制字符串),用 parseInt(str, 10);如果要完整数字(含小数、指数),用 parseFloat(str);如果追求语义清晰、容错低、无需进制,Number(str) 往往更合适。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










