js indexof 实现原理
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 进行了高度优化:
- 对于字符串,可能使用 Boyer-Moore 等高效字符串搜索算法。
- 对于数组,会利用内存连续性和类型信息加速搜索。
注意事项
- 字符串
indexOf区分大小写,如需不区分大小写搜索需先转换为统一大小写。 - 数组
indexOf使用严格相等比较,对象比较的是引用而非内容。 - 负数
fromIndex表示从末尾开始的偏移量。






