# JavaScript中lastIndexOf()如何使用 ## 一、lastIndexOf()方法概述 `lastIndexOf()`是JavaScript字符串和数组对象的内置方法,用于从后向前搜索指定元素/子字符串,返回其最后一次出现的位置索引。与`indexOf()`方法相比,它实现了反向搜索功能。 ### 基本语法 ```javascript // 字符串用法 str.lastIndexOf(searchValue[, fromIndex]) // 数组用法 arr.lastIndexOf(searchElement[, fromIndex])
参数 | 类型 | 描述 |
---|---|---|
searchValue/searchElement | string/any | 必需。要查找的值 |
fromIndex | number | 可选。开始查找的位置,默认为length-1 |
fromIndex参数特性:
严格相等比较:
返回值 | 含义 |
---|---|
正整数 | 元素最后出现的位置索引 |
-1 | 未找到指定元素 |
0 | 元素出现在首位 |
const str = "Hello world, welcome to the universe."; console.log(str.lastIndexOf("e")); // 36(最后一个e的位置)
const str = "hello world, hello javascript"; console.log(str.lastIndexOf("hello", 10)); // 返回0(从索引10向前搜索)
const str = "Hello World"; console.log(str.lastIndexOf("h")); // -1(区分大小写)
const arr = [2, 5, 9, 2]; console.log(arr.lastIndexOf(2)); // 3 console.log(arr.lastIndexOf(7)); // -1
const obj = {name: "John"}; const arr = [obj, {name: "Jane"}, obj]; console.log(arr.lastIndexOf(obj)); // 2
function getFileExtension(filename) { const dotIndex = filename.lastIndexOf('.'); return dotIndex === -1 ? '' : filename.slice(dotIndex + 1); }
function getUrlParam(url, param) { const paramStart = url.lastIndexOf(param + '='); if (paramStart === -1) return null; // 后续处理逻辑... }
function isValidEmail(email) { return email.lastIndexOf('@') > 0 && email.lastIndexOf('.') > email.lastIndexOf('@'); }
"hello".lastIndexOf(""); // 返回5(字符串长度)
[NaN].lastIndexOf(NaN); // -1(因为NaN !== NaN)
const arr = [1,,3]; arr.lastIndexOf(undefined); // -1(空槽不是undefined)
findLastIndex()
(ES2023新增)方法 | 搜索方向 | 返回值 | 适用对象 |
---|---|---|---|
indexOf() | 从前向后 | 首次出现索引 | 字符串/数组 |
lastIndexOf() | 从后向前 | 末次出现索引 | 字符串/数组 |
includes() | 从前向后 | 布尔值 | 字符串/数组 |
findLastIndex() | 从后向前 | 满足条件的末次索引 | 仅数组 |
lastIndexOf()
是JavaScript中实用的逆向搜索工具,掌握其特性和边界条件处理能有效解决开发中的位置查找问题。结合具体场景配合其他方法使用,可以构建更健壮的搜索逻辑。
提示:ES2023新增的
findLast()
和findLastIndex()
方法为数组提供了更强大的逆向搜索能力,在支持新特性的环境中可以优先考虑使用。 “`
这篇文章共计约1200字,采用Markdown格式编写,包含: 1. 10个核心章节 2. 12个代码示例 3. 3个对比表格 4. 实际应用场景说明 5. 兼容性提示和性能建议 6. 特殊案例处理说明
可根据需要调整代码示例的数量或增加更复杂的应用场景部分。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。