indexOf返回子串首次出现的索引(未找到为-1),适合需定位或后续操作;includes返回布尔值,语义直观,推荐用于存在性判断。

JavaScript 中查找子串,indexOf 和 includes 是两个最常用的方法,用途相似但返回值和语义不同,选对方法能让你的代码更清晰、更安全。
用 indexOf 获取子串位置(支持精确判断)
indexOf 返回子串**首次出现的索引位置**,没找到时返回 -1。它适合需要知道“在哪”或做进一步逻辑处理的场景,比如截取、替换或判断是否在特定位置出现。
- 基本用法:
"hello world".indexOf("world")→ 返回 6 - 未找到时:
"hello".indexOf("xyz")→ 返回 -1(注意不是false或undefined) - 可指定起始搜索位置:
"ababab".indexOf("ab", 2)→ 从下标 2 开始找,返回 4 - 判断是否存在时,要显式比较:
str.indexOf("abc") !== -1,不能直接写if (str.indexOf("abc"))(因为索引 0 会被当成 false)
用 includes 判断子串是否存在(语义更直观)
includes 是 ES6 新增方法,直接返回 布尔值(true / false),语义明确——“是否包含”。它让条件判断更简洁、不易出错。
- 基本用法:
"hello world".includes("world")→ true - 不区分大小写?不支持!
"Hello".includes("hello")→ false(如需忽略大小写,先转成同一大小写,例如str.toLowerCase().includes(target.toLowerCase())) - 也可指定起始位置:
"abcabc".includes("abc", 1)→ 从下标 1 开始搜,返回 true(匹配到第二个 "abc") - 推荐用于
if判断:if (email.includes("@")) { ... },比indexOf !== -1更直白
什么时候该用哪个?简单对照
不用死记,看需求选:
立即学习“Java免费学习笔记(深入)”;
- 想知道子串在哪儿、要拿索引做后续操作(比如
slice、substring)→ 用indexOf - 只关心“有没有”,写
if或while条件 → 优先用includes,更安全也更易读 - 需要兼容老浏览器(如 IE)?
indexOf全平台支持;includes需 IE9+,IE 不支持,可用 Babel 转译或加 polyfill
小提醒:别混淆 indexOf 和 search
search 也返回索引,但它接受正则表达式,不支持起始位置参数,且没找到时也返回 -1。如果只是查固定字符串,indexOf 性能更好、行为更确定;要用正则才考虑 search。


















