indexOf()、lastIndexOf()、findIndex()的区别

本文介绍了JavaScript中的三种数组查找方法:indexOf()查找第一个匹配项的索引,lastIndexOf()查找最后一个匹配项的索引,以及findIndex()执行自定义回调函数查找满足条件的第一个元素索引。它们分别处理基本类型和复杂查找需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

indexOf(),查找第一个索引

用法是arr.indexOf(searchElement[, fromIndex = arr.length - 1]),返回在数组中可以找到给定元素的第一个索引,如果不存在,则返回-1。默认从数组的前面向后查找,如果有第二个参数则从 fromIndex 处开始查找注意,该方法判断是否包含空字符串时,返回值是 0;indexOf() 使用严格等号(=== )来比较 searchElement 和数组中的元素,所以indexOf 更多的是用于查找基本类型,如果是对象类型,则是判断是否是同一个对象的引用。

lastIndexOf() ,查找最后一个索引

用法是arr.lastIndexOf(searchElement[, fromIndex = arr.length - 1]),返回指定元素(也即有效的 JavaScript 值或变量)在数组中的最后一个的索引,如果不存在则返回 -1。默认从数组的后面向前查找,如果有第二个参数则从 fromIndex 处开始查找。

findIndex(),查找第一个索引

arr.findIndex(callback[, thisArg]),返回数组中满足提供的测试函数的第一个元素的索引,否则返回-1。默认从数组的前面向后查找。findIndex 期望回调函数作为第一个参数。如果你需要非基本类型数组(例如对象)的索引,或者你的查找条件比一个值更复杂,可以使用这个方法。

<think>我们正在讨论JavaScript中的indexOf方法。根据用户的问题,我们需要解释indexOf方法的作用并提供使用示例。 注意:用户的问题是关于JavaScript的,所以我们需要确保我们的回答是基于JavaScript的,而不是其他语言indexOf方法在JavaScript中用于字符串和数组,用于返回指定元素在字符串或数组中首次出现的位置。如果未找到该元素,则返回-1。 对于字符串: 语法:string.indexOf(searchValue[, fromIndex]) 参数: searchValue: 要搜索的字符串值。 fromIndex(可选): 开始搜索的位置,默认为0。 对于数组: 语法:array.indexOf(searchElement[, fromIndex]) 参数: searchElement: 要查找的元素。 fromIndex(可选): 开始搜索的索引,默认为0。 我们将分别给出字符串和数组的示例。 注意:数组的indexOf方法在ECMAScript 5(ES5)中引入,所以对于旧版浏览器可能需要polyfill。 由于用户要求使用中文回答,并且需要生成相关问题,我们按照以下结构: 1. 解释indexOf方法的作用(字符串和数组)。 2. 提供使用示例(字符串和数组)。 3. 注意事项(如区分大小写、未找到返回-1等)。 4. 生成相关问题。 另外,根据系统级指令,我们需要在行内数学表达式时使用$...$,但在这个问题中可能不需要数学公式。所以我们可以忽略数学表达式的部分,除非有需要。 但是,根据指令,我们还需要在回答中引用的段落末尾自然地添加引用标识。然而,在这个问题中,我们没有引用外部资料,所以可以省略引用标识,或者如果我们参考了某些资料,可以添加。但是用户没有提供引用资料,所以我们可以不添加。 然而,我们注意到用户提供的参考站内引用是空的,所以我们不需要添加引用标识。 现在,我们开始编写回答。</think>### JavaScript `indexOf` 方法详解 #### 作用与定义 `indexOf()` 是 JavaScript 中**字符串**和**数组**对象的内置方法,用于**返回指定元素首次出现的索引位置**。核心特性包括: 1. **返回值**: - 找到元素 → 返回从 0 开始的索引值 - 未找到元素 → 返回 `-1` 2. **区分大小写**:对大小写敏感(如 `"A"` 和 `"a"` 视为不同) 3. **严格相等**:使用 `===` 运算符进行匹配[^1] #### 字符串用法示例 ```javascript const text = "Hello, JavaScript!"; console.log(text.indexOf("Java")); // 输出: 7(从索引7开始匹配) console.log(text.indexOf("java")); // 输出: -1(大小写不匹配) console.log(text.indexOf("o", 5)); // 输出: 8(从索引5开始搜索) console.log(text.indexOf("!")); // 输出: 18 ``` #### 数组用法示例 ```javascript const fruits = ["🍎", "🍌", "🥭", "🍌", "🍇"]; console.log(fruits.indexOf("🍌")); // 输出: 1(首个香蕉位置) console.log(fruits.indexOf("🍌", 2)); // 输出: 3(从索引2开始搜索) console.log(fruits.indexOf("🍊")); // 输出: -1(不存在) ``` #### 关键注意事项 1. **全等匹配**:仅匹配完全相同的值(不进行类型转换) ```javascript [1, 2, 3].indexOf("1"); // 返回 -1(数字1 ≠ 字符串"1") ``` 2. **稀疏数组**:空位(empty)会被跳过 ```javascript [, , "a"].indexOf(undefined); // 返回 -1 ``` 3. **NaN 处理**:无法匹配 `NaN`(需用 `includes()`) ```javascript [NaN].indexOf(NaN); // 返回 -1 ``` #### 替代方案 - 需要检查存在性 → `includes()` - 查找对象引用 → `findIndex()` - 反向搜索 → `lastIndexOf()`
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rinba_murphy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值