应优先使用 includes() 替代 indexof() 判断存在性,因其语义清晰、返回布尔值、正确处理 nan 和空位、数组字符串通用、现代环境全面支持且工具链友好。

直接用 includes() 替代 indexOf() 判断元素是否存在,是现代 JavaScript 开发中的主流做法。它不是“更炫”,而是更准、更稳、更贴近人的表达习惯。
语义清晰,一眼看懂意图
判断“有没有”,就该返回 true 或 false,而不是一个数字——includes() 做到了这点。
-
if (roles.includes('admin'))→ “如果角色里有管理员” -
if (roles.indexOf('admin') !== -1)→ “如果角色里有管理员,但得先算出位置再跟 -1 比较”
后者多了一层隐含逻辑,容易漏写 !== -1,导致 0(第一个位置)被误判为 false。
正确处理 NaN 和空位
indexOf() 在特殊值上会“失灵”,而 includes() 用的是严格相等(=== 的改进版),对边界情况更可靠:
-
[NaN].includes(NaN)→true;[NaN].indexOf(NaN)→-1 -
[undefined, 1, 2].includes(undefined)→true - 稀疏数组中,
includes()把空槽当作undefined检查,indexOf()会跳过它们
参数一致,字符串和数组通用
同一个方法名、同一套签名,既可用于数组也可用于字符串:
[1, 2, 3].includes(2)"hello".includes("ll")- 都支持第二个参数
fromIndex:从指定位置开始查找
不用在两种数据类型间切换思维,也不用重复记忆不同 API 的行为差异。
现代环境无兼容负担
所有主流浏览器(Chrome 47+、Firefox 43+、Safari 10+)、Node.js 14+ 都原生支持 includes()。
- 无需引入 polyfill(除非要支持 IE 或极老版本 Node)
- TypeScript 也默认识别,类型推导准确
- ESLint 等工具会主动提示
indexOf(...) !== -1可简化为includes(...)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











