includes用于严格相等判断,基于samevaluezero算法,支持nan但不支持深比较或子串匹配;模糊匹配需用some()配合自定义逻辑,如子串、忽略大小写、属性或数值范围匹配。

includes 用于精确判断数组中是否存在某个**完全相等**的元素,而模糊匹配(如用 some() + 自定义条件)则用于判断是否存在**满足某种近似或部分匹配规则**的元素。两者目的不同:一个是“有没有一模一样的”,一个是“有没有差不多的”。
includes:只认严格相等
includes() 内部使用的是 SameValueZero 算法,能正确处理 NaN,但不支持对象深比较或字符串子串匹配。
- 对基本类型(数字、字符串、布尔值)直接比值
- 对引用类型(对象、数组),只比较是否为同一内存地址
- 无法判断字符串是否“包含某子串”,比如
['apple', 'banana'].includes('app')返回false
模糊匹配:靠 some() + 自定义逻辑实现
要实现“包含子串”“忽略大小写”“近似数值”等模糊场景,需配合 some() 或 find() 遍历并手动写判断条件。
- 子串匹配:
arr.some(item => item.includes('app')) - 忽略大小写:
arr.some(item => item.toLowerCase().includes('app')) - 对象属性匹配:
users.some(u => u.name.startsWith('A')) - 数值范围匹配:
nums.some(n => Math.abs(n - target)
性能与可读性权衡
includes() 是原生方法,语义清晰、性能好,适合明确的全等判断;模糊匹配虽灵活,但每次都要遍历+执行回调,代码稍长,且容易写出低效逻辑(如在大数组里反复调用 indexOf 或正则)。
- 优先用
includes()处理确定性的存在性检查 - 模糊场景别硬套
includes(),该写回调就写回调 - 若频繁进行同类模糊查找,可封装成复用函数,比如
includesSubstring(arr, str)
不复杂但容易忽略:选哪个,关键看你要回答的问题是“它在不在里面?”还是“有没有看起来像它的?”
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











