Array.indexOf() 返回数组中第一个匹配元素的索引,使用严格相等比较,支持 fromIndex 参数指定起始位置,但不适用于查找所有匹配项、条件查找或对象属性匹配等场景。

Array.indexOf() 是 JavaScript 中查找数组中第一个匹配元素索引的最直接方法,它返回匹配项的下标(从 0 开始),没找到则返回 -1。用法简单,但有几个关键点影响“快速”和“准确”查找。
基础用法:找第一个匹配值的索引
调用方式为 arr.indexOf(searchElement[, fromIndex]),其中 fromIndex 可选,默认为 0(从开头查起)。
- 对基本类型(如数字、字符串、布尔值)可直接比较:
console.log(fruits.indexOf('banana')); // 输出 1(第一个 banana 的位置)
console.log(fruits.indexOf('grape')); // 输出 -1(不存在)
注意严格相等(===)比较规则
indexOf() 使用的是严格相等判断,不会做类型转换。这意味着:
-
[1, 2, 3].indexOf('1')返回 -1(字符串 '1' ≠ 数字 1) -
[NaN].indexOf(NaN)返回 -1(NaN 不等于自身,这是 JS 特性) - 对象或数组等引用类型,只在同一引用时才匹配:
const arr = [obj, { id: 1 }];
console.log(arr.indexOf(obj)); // 0(同一个引用)
console.log(arr.indexOf({ id: 1 })); // -1(新对象,不同引用)
从指定位置开始查找(提升效率)
如果已知目标可能出现在后半段,或想跳过前面已检查的部分,可用 fromIndex 参数避免重复遍历:
立即学习“Java免费学习笔记(深入)”;
- 正数:从该索引开始向后查找(含该位置)
- 负数:从末尾倒数,例如
-1表示从最后一个元素开始 - 超出范围会自动截断(如
fromIndex ≥ arr.length→ 直接返回 -1)
console.log(nums.indexOf(4)); // 1(第一次出现)
console.log(nums.indexOf(4, 2)); // 4(从索引 2 开始,第二次出现)
console.log(nums.indexOf(4, -2)); // 4(从倒数第 2 个起查,即索引 4 起)
替代方案提醒:何时不用 indexOf()
当需要以下能力时,indexOf() 就不够用了,应考虑其他方法:
- 查找所有匹配项的索引 → 用
forEach()或reduce()遍历收集 - 基于条件查找(如找大于 5 的第一个数)→ 用
findIndex() - 查找对象中某个属性值(如 name === 'Alice')→ 用
findIndex()配合箭头函数 - 需兼容老旧 IE(indexOf() 需 polyfill,或改用循环
const users = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}];
const idx = users.findIndex(u => u.name === 'Alice'); // 0


















