indexOf从左找第一个匹配项,lastIndexOf从右找最后一个匹配项;均用严格相等比较,返回索引或-1,且对NaN有特殊处理。

indexOf 和 lastIndexOf 是 JavaScript 数组中用于查找元素位置的两个基础方法,它们都返回匹配元素的索引(从 0 开始),没找到则返回 -1。关键区别在于:前者从头开始找第一个匹配项,后者从尾开始找最后一个匹配项。
indexOf:从左往右找第一个匹配项
语法:arr.indexOf(searchElement, fromIndex)。searchElement 是要查找的值;fromIndex(可选)指定开始搜索的位置,默认为 0。如果为负数,则从末尾倒着算(例如 -1 表示最后一个元素),但搜索方向仍是向右。
- 使用严格相等(
===)比较,所以indexOf(5)找不到"5" - 对对象或数组这类引用类型,只比地址,不比内容:
[1,2].indexOf([1,2])返回-1 - 例子:
[3, 5, 7, 5, 9].indexOf(5)→1;.indexOf(5, 2)→3
lastIndexOf:从右往左找最后一个匹配项
语法:arr.lastIndexOf(searchElement, fromIndex)。fromIndex(可选)默认是数组长度减 1(即最后一个索引)。如果为负数,也从末尾倒算,但搜索方向是向左。
- 同样用
===判断,不支持模糊匹配或自定义逻辑 - 适合快速判断某值是否在数组末尾附近出现过
- 例子:
[3, 5, 7, 5, 9].lastIndexOf(5)→3;.lastIndexOf(5, 2)→1(从索引 2 开始往左找)
注意 NaN 的特殊情况
这两个方法对 NaN 的处理和 === 不同:NaN === NaN 是 false,但 [NaN].indexOf(NaN) 返回 0。这是历史兼容行为,内部用了特殊的 NaN 检测逻辑。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
替代方案:需要更灵活查找时怎么办
如果要按条件查找(比如找大于 10 的第一个数)、找对象属性、或需要返回元素本身而非索引,就该用 find/findIndex 或 filter:
-
arr.findIndex(x => x > 10)—— 返回满足条件的第一个索引 -
arr.find(x => x.name === "Alice")—— 返回匹配的对象 - 想兼容旧浏览器?可用
for循环手动遍历,控制逻辑更自由
不复杂但容易忽略细节。用对方法,能少写不少循环代码。
立即学习“Java免费学习笔记(深入)”;

















