Number严格全量解析整个字符串,parseInt宽松前缀解析只取开头合法整数部分;前者支持十六进制字面量但不支持进制参数,后者需指定radix且默认行为不稳定。

核心区别在于:Number 是严格全量解析,要求整个字符串必须合法表示一个数字;parseInt 是宽松前缀解析,只取开头能识别的整数部分,遇到非法字符就停。
Number:要么全对,要么 NaN
它把整个字符串当作一个完整数值来验证:
- “123” → 123(✅)
- “12.5” → 12.5(✅,支持小数)
- “ 42 ” → 42(✅,自动去除首尾空格)
- “12px” → NaN(❌,含非数字字符)
- “” → 0(✅,空字符串转为 0)
- “0x1A” → 26(✅,识别十六进制字面量)
- “070” → 70(✅,ES5+ 按十进制处理,不按八进制)
parseInt:从左开始,取到第一个“拦路虎”为止
它逐字符扫描,一旦遇到不能作为数字一部分的字符就立即停止,只返回已解析的整数部分:
- “123abc” → 123(✅)
- “12.5” → 12(✅,小数点不算整数字符,截断)
- “ 42px” → 42(✅,跳过开头空格,取到 p 停)
- “px123” → NaN(❌,首字符不是数字或符号)
- “” → NaN(❌,空字符串不被接受)
- “0x1A” → 26(✅,默认识别 0x 前缀为十六进制)
- “070” → 70(✅,但注意:不加 radix 时行为不稳定,建议始终写 parseInt(str, 10))
进制支持与默认行为不同
parseInt 支持第二个参数指定进制(如 parseInt(“100”, 2) → 4),Number 不支持进制参数,但能识别 “0x”、“0o”、“0b” 等标准字面量格式。
立即学习“Java免费学习笔记(深入)”;
- parseInt(“100”, 2) → 4(二进制转十进制)
- Number(“0b100”) → 4(✅,原生支持二进制字面量)
- parseInt(“100”) → 100(默认十进制,但历史原因可能误判 “010” 为八进制,所以务必显式传 10)
适用场景怎么选?
看你要什么结果:
- 要判断用户输入是否“完全合法”的数字(比如表单校验)→ 用 Number,配合 isNaN() 检查
- 要从带单位的值里“提取整数”(如 “100px”、“-5em”)→ 用 parseInt(注意负号支持)
- 要提取小数(如 “3.14rem”)→ 用 parseFloat,不是 parseInt
- 想写得短又明确 → 一元加号 +str 效果等同 Number(str),但语义更轻量


















