number() 和 parseint() 的核心区别在于解析策略:number() 尝试将输入转换为完整的数值,遇到非数字字符(如字母或空格)即返回 nan;而 parseint() 会忽略前导空白并持续读取直到遇到第一个无法识别的字符,从而提取出前缀中的整数部分。

Number() 如何处理包含单位的字符串
当输入字符串包含单位后缀时,Number() 会直接判定为无效数字并返回 NaN,因为它要求整个字符串必须能被解析为一个数值。相比之下,parseInt() 会跳过开头的空白,读取有效数字部分,一旦遇到非数字字符(如 'px' 或 'kg')就停止解析并返回已读取的部分。

console.log(Number("100px")); // NaN
console.log(parseInt("100px")); // 100
console.log(Number(" 50 ")); // 50
console.log(parseInt(" 50 ")); // 50
上述代码展示了两者对带单位字符串的处理差异。Number("100px") 因为 'p' 不是数字的一部分,所以返回 NaN。而 parseInt("100px") 成功提取了前缀 "100"。对于纯数字字符串,两者行为一致。注意 parseInt 只解析整数,小数点后的内容会被截断。
parseInt() 如何处理二进制和十六进制
parseInt() 支持通过第二个参数指定进制基数(radix),可以解析二进制、八进制、十进制和十六进制字符串。如果省略 radix 参数,parseInt() 会根据字符串前缀自动推断:以 "0x" 开头视为十六进制,以 "0" 开头在旧标准中可能被视为八进制(现代浏览器通常视为十进制,但建议显式指定)。Number() 不支持这种基于进制的解析,它始终将输入视为十进制浮点数,除非是特殊的十六进制字面量语法(但在字符串中不适用)。

console.log(parseInt("1010", 2)); // 10 (二进制)
console.log(parseInt("FF", 16)); // 255 (十六进制)
console.log(parseInt("010")); // 10 (现代浏览器默认十进制)
console.log(Number("1010")); // 1010 (始终十进制)
这段代码演示了 parseInt() 在不同进制下的表现。parseInt("1010", 2) 将二进制字符串 "1010" 转换为十进制数 10。parseInt("FF", 16) 将十六进制字符串 "FF" 转换为 255。而 Number("1010") 始终将其作为十进制数处理,结果为 1010。在使用 parseInt() 时,强烈建议始终提供 radix 参数以避免歧义。
Number() 如何处理空字符串和 null
Number() 对空字符串 "" 返回 0,对 null 也返回 0,但对 undefined 返回 NaN。parseInt() 对空字符串 "" 返回 NaN,对 null 也返回 NaN,因为它无法从这些值中提取任何数字前缀。这意味着在处理可能为空的用户输入时,Number() 可能会产生意外的 0 值,而 parseInt() 会更严格地拒绝无效输入。
console.log(Number("")); // 0
console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN
console.log(parseInt("")); // NaN
console.log(parseInt(null)); // NaN
以上代码展示了 Number() 和 parseInt() 对边界值的处理。Number("") 返回 0,这在某些场景下可能导致逻辑错误,例如计算总价时误将空输入当作 0。parseInt("") 返回 NaN,更符合“无效输入”的语义。在实际开发中,如果需要区分空值和零值,应谨慎使用 Number(),或者在使用前进行额外的空值检查。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











