Number() 严格转标准数字,保留小数;parseInt() 从字符串开头提取整数并支持进制,遇非数字字符即停止。前者适合精确数值转换,后者适用于带单位或明确只需整数的场景。

JavaScript 中数字转换的核心在于理解 Number() 和 parseInt() 的行为差异:前者是严格类型转换,后者是按规则解析整数。用错容易导致意外结果,比如 parseInt("12.34") 得到 12,而 Number("12.34") 得到 12.34。
Number():尝试把任意值转成标准数字
Number() 是最直接的转换方式,它会按 JavaScript 的 ToNumber 抽象规则处理输入:
- 空字符串
""→0 -
null→0,undefined→NaN -
true→1,false→0 - 字符串如
" 42 "→42(自动忽略首尾空格) - 字符串如
"12.34"→12.34,"0x1A"→26(支持十六进制) - 无效格式如
"abc"或"12a"→NaN
建议在需要保留小数、或不确定输入是否含小数点时优先用 Number(),并配合 isNaN() 检查结果有效性。
parseInt():从字符串开头提取整数,支持进制指定
parseInt() 不是简单“转整数”,而是“从左往右读,遇到非数字字符就停”。它有两个关键参数:string 和可选的 radix(进制基数):
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
- 不传
radix时,可能自动识别0x(十六进制)、0o(八进制)、0b(二进制),但老版本对以0开头的数有歧义(如"012"可能当八进制),所以务必显式传10 -
parseInt("123px")→123,parseInt(" 45.67abc")→45 -
parseInt("0xff", 16)→255,parseInt("1010", 2)→10 -
parseInt("abc")或parseInt("")→NaN
适合处理带单位的数字字符串(如 "100px")、或明确只要整数部分的场景,但别用来处理浮点字符串——它不会四舍五入,也不会报错,只是截断。
常见陷阱与替代方案
实际开发中容易踩坑的地方:
-
parseInt("0.1")→0(因为.不是有效数字,一开头就停) -
Number("012")→12(ES5+ 统一按十进制),而parseInt("012")在无radix时行为不一致 - 想取整?别依赖
parseInt(),用Math.floor()、Math.round()或位运算~~num更明确 - 安全转换推荐写法:
const num = Number(str); if (isNaN(num)) { /* 处理错误 */ }
需要转整数且允许截断时用 parseInt(str, 10);需要完整数值(含小数)或统一处理各种类型时,用 Number() 更可靠。

















