js parseint实现
JavaScript parseInt 实现原理
JavaScript 的 parseInt 函数用于将字符串转换为整数。其基本语法为:
parseInt(string, radix);
string 是要解析的字符串,radix 是进制基数(2 到 36)。
实现步骤
-
处理空字符串
如果输入字符串为空,返回NaN。 -
处理进制参数
如果未提供radix或为 0,默认按十进制解析。
如果radix小于 2 或大于 36,返回NaN。 -
跳过前导空格
忽略字符串开头所有空白字符(如空格、制表符)。 -
处理符号
检查第一个非空格字符是否为+或-,记录符号。 -
处理进制前缀
如果radix为 16,跳过0x或0X前缀。
如果radix未指定且字符串以0x或0X开头,按十六进制解析。 -
逐字符解析
从有效字符开始,逐个字符转换为数字值。
遇到无法识别的字符时停止解析。 -
返回结果
将解析的数字乘以符号,返回最终结果。如果未解析任何数字,返回NaN。
代码实现示例
function customParseInt(string, radix) {
if (typeof string !== 'string' && typeof string !== 'number') {
return NaN;
}
string = String(string).trim();
if (string.length === 0) return NaN;
radix = radix || 10;
if (radix < 2 || radix > 36) return NaN;
let sign = 1;
let index = 0;
if (string[index] === '+') {
index++;
} else if (string[index] === '-') {
sign = -1;
index++;
}
if (radix === 16 && string.substr(index, 2).toLowerCase() === '0x') {
index += 2;
}
let result = 0;
let anyDigitParsed = false;
while (index < string.length) {
const char = string[index].toLowerCase();
let digit;
if (char >= '0' && char <= '9') {
digit = char.charCodeAt(0) - '0'.charCodeAt(0);
} else if (char >= 'a' && char <= 'z') {
digit = char.charCodeAt(0) - 'a'.charCodeAt(0) + 10;
} else {
break;
}
if (digit >= radix) break;
result = result * radix + digit;
anyDigitParsed = true;
index++;
}
return anyDigitParsed ? sign * result : NaN;
}
注意事项
parseInt会截断浮点数的小数部分,例如parseInt('123.45')返回123。- 如果字符串以
0开头且未指定radix,某些浏览器会按八进制解析(已弃用)。 - 始终明确指定
radix参数以避免意外行为。
数学公式
解析过程中数字的计算公式为:
result = sign × (d₀ × radixⁿ⁻¹ + d₁ × radixⁿ⁻² + ... + dₙ₋₁ × radix⁰)
其中:

sign为 1 或 -1dₖ是第 k 位数字的值n是数字的总位数






