es6 的 includes() 方法优于 indexof() !== -1:语义更清晰(直接判断“是否包含”)、正确处理 nan、支持起始索引参数;但仅支持严格相等,复杂匹配需用 some()。

ES6 的 includes() 方法可以直接替代 indexOf() !== -1 这种写法,语义更清晰、代码更简洁。
语义更直观:判断“是否包含”,而非“位置是否不存在”
includes() 的设计目标就是做存在性判断,返回布尔值;而 indexOf() 本意是查找索引,需额外比较是否为 -1 才能表达“不存在”。这种间接写法容易出错或理解成本高。
- ✅ 推荐:
arr.includes(5)—— 直观表达“数组里有没有 5” - ❌ 冗余:
arr.indexOf(5) !== -1—— 先求位置,再否定,逻辑绕了一步
处理 NaN 更可靠
indexOf() 无法正确识别 NaN(因为 NaN !== NaN),而 includes() 内部使用的是 SameValueZero 算法,能正确匹配 NaN。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
[NaN].indexOf(NaN)→-1(错误地认为不包含) -
[NaN].includes(NaN)→true(正确)
支持第二个参数:从指定索引开始搜索
和 indexOf() 类似,includes() 也接受可选的起始索引(默认为 0),可用于检查某位置之后是否还存在该元素。
-
[1, 2, 3, 2, 4].includes(2, 2)→true(从索引 2 开始找,找到后面的 2) -
[1, 2, 3, 2, 4].indexOf(2, 2)→3(同样从索引 2 开始,返回位置)
注意:不支持回调函数,也不能做复杂匹配
includes() 只做严格相等(===)判断,不支持自定义逻辑。如果要根据对象属性、条件过滤等判断是否存在,仍需用 some():
- 简单值匹配 → 用
includes() - 对象/条件匹配 → 用
some(item => item.id === 123) - 需要索引或更多控制 → 仍可用
indexOf()或findIndex()
不复杂但容易忽略细节,日常判断存在性时优先选 includes() 就对了。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










