js 实现parseint
JavaScript 实现 parseInt
在 JavaScript 中,parseInt 是一个用于将字符串转换为整数的内置函数。以下是其实现原理和使用方法的详细说明。
基本语法
parseInt(string, radix);
string:需要解析的字符串。radix(可选):表示字符串的基数(进制),范围是 2 到 36。默认为 10。
实现逻辑
-
忽略前导空格
解析时会跳过字符串开头的空格字符,直到找到第一个非空格字符。 -
处理符号
如果第一个非空格字符是+或-,会将其作为符号处理。 -
解析数字
从第一个有效字符开始,解析连续的数字字符(根据radix决定有效字符范围),直到遇到非数字字符为止。 -
基数处理
- 如果未指定
radix或为 0,JavaScript 会根据字符串前缀推断基数:0x或0X开头:基数为 16(十六进制)。0开头:基数为 8 或 10(部分环境可能不同)。- 其他情况:基数为 10。
- 如果
radix不在 2 到 36 之间,返回NaN。
- 如果未指定
自定义实现示例
以下是一个简化的 parseInt 自定义实现:

function customParseInt(str, radix = 10) {
// 检查基数是否有效
if (radix < 2 || radix > 36) return NaN;
// 正则匹配有效字符
const regex = new RegExp(`^[\\s]*([+\\-]?)([0-${Math.min(radix - 1, 9)}a-${String.fromCharCode(86 + radix)}A-${String.fromCharCode(54 + radix)}]+)`);
const match = str.match(regex);
if (!match) return NaN;
const [, sign, digits] = match;
let result = 0;
for (let i = 0; i < digits.length; i++) {
const char = digits[i].toLowerCase();
let value;
if (/[0-9]/.test(char)) {
value = parseInt(char, 10);
} else {
value = char.charCodeAt(0) - 87; // a -> 10, b -> 11, etc.
}
if (value >= radix) break; // 无效字符终止解析
result = result * radix + value;
}
return sign === '-' ? -result : result;
}
注意事项
- 原生
parseInt会截断小数部分,例如parseInt("12.34")返回12。 - 如果字符串的第一个非空格字符不是数字或符号,返回
NaN。 - 某些历史实现中,
parseInt("08")可能返回 0(八进制解析),但现代环境通常按十进制处理。
示例用法
console.log(customParseInt("123")); // 123
console.log(customParseInt("FF", 16)); // 255
console.log(customParseInt("1010", 2)); // 10
console.log(customParseInt("abc")); // NaN






