当前位置:首页 > JavaScript

js parseint实现

2026-04-06 03:50:57JavaScript

JavaScript parseInt 实现原理

JavaScript 的 parseInt 函数用于将字符串转换为整数。其基本语法为:

parseInt(string, radix);

string 是要解析的字符串,radix 是进制基数(2 到 36)。

实现步骤

  1. 处理空字符串
    如果输入字符串为空,返回 NaN

  2. 处理进制参数
    如果未提供 radix 或为 0,默认按十进制解析。
    如果 radix 小于 2 或大于 36,返回 NaN

  3. 跳过前导空格
    忽略字符串开头所有空白字符(如空格、制表符)。

  4. 处理符号
    检查第一个非空格字符是否为 +-,记录符号。

  5. 处理进制前缀
    如果 radix 为 16,跳过 0x0X 前缀。
    如果 radix 未指定且字符串以 0x0X 开头,按十六进制解析。

  6. 逐字符解析
    从有效字符开始,逐个字符转换为数字值。
    遇到无法识别的字符时停止解析。

  7. 返回结果
    将解析的数字乘以符号,返回最终结果。如果未解析任何数字,返回 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⁰)
其中:

js parseint实现

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

标签: jsparseint
分享给朋友:

相关文章

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…