当前位置:首页 > JavaScript

js indexof 实现原理

2026-03-16 08:41:59JavaScript

JavaScript 的 indexOf 实现原理

JavaScript 中的 indexOf 方法用于查找字符串或数组中指定元素的第一次出现位置。以下是其实现原理的详细解析:

字符串的 indexOf

字符串的 indexOf 方法用于查找子字符串在主字符串中的首次出现位置。其基本实现原理如下:

  • 遍历主字符串,从起始位置开始逐个字符与子字符串的第一个字符比较。
  • 如果找到匹配的字符,继续比较后续字符是否完全匹配子字符串。
  • 如果完全匹配,返回当前起始位置的索引。
  • 如果遍历完主字符串仍未找到匹配,返回 -1。

示例代码模拟实现:

function customIndexOf(str, searchStr, fromIndex = 0) {
  const strLen = str.length;
  const searchLen = searchStr.length;

  if (searchLen === 0) return fromIndex <= strLen ? fromIndex : strLen;

  for (let i = fromIndex; i <= strLen - searchLen; i++) {
    let match = true;
    for (let j = 0; j < searchLen; j++) {
      if (str[i + j] !== searchStr[j]) {
        match = false;
        break;
      }
    }
    if (match) return i;
  }
  return -1;
}

数组的 indexOf

数组的 indexOf 方法用于查找元素在数组中的首次出现位置。其实现原理如下:

  • 遍历数组,从起始位置开始逐个元素与目标元素比较。
  • 使用严格相等(===)进行比较。
  • 如果找到匹配元素,返回当前索引。
  • 如果遍历完数组仍未找到匹配,返回 -1。

示例代码模拟实现:

function customArrayIndexOf(arr, searchElement, fromIndex = 0) {
  const len = arr.length;
  fromIndex = fromIndex >= 0 ? fromIndex : Math.max(0, len + fromIndex);

  for (let i = fromIndex; i < len; i++) {
    if (arr[i] === searchElement) {
      return i;
    }
  }
  return -1;
}

性能优化

现代 JavaScript 引擎(如 V8)对 indexOf 进行了高度优化:

js indexof 实现原理

  • 对于字符串,可能使用 Boyer-Moore 等高效字符串搜索算法。
  • 对于数组,会利用内存连续性和类型信息加速搜索。

注意事项

  • 字符串 indexOf 区分大小写,如需不区分大小写搜索需先转换为统一大小写。
  • 数组 indexOf 使用严格相等比较,对象比较的是引用而非内容。
  • 负数 fromIndex 表示从末尾开始的偏移量。

标签: 原理js
分享给朋友:

相关文章

vue实现放大镜原理

vue实现放大镜原理

Vue 实现放大镜原理 实现放大镜效果的核心原理是通过鼠标移动事件获取位置信息,动态计算放大区域并显示放大后的图像。以下是基于 Vue 的实现方法: 基本结构设计 HTML 部分需包含原图容器、放大…

js实现图片轮播

js实现图片轮播

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

js实现日历

js实现日历

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

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…