includes方法更直接判断元素存在性,语义清晰、代码简洁;支持nan识别和负索引起始位置,使用samevaluezero算法,推荐在仅需判断存在性时优先使用。

includes 方法比 indexOf 更直接地判断元素是否存在于数组中,无需比较返回值是否为 -1,语义更清晰、代码更简洁。
语法差异一目了然
indexOf 返回匹配元素的索引(找不到时为 -1),需手动判断:
const arr = [1, 2, 3, 4];
if (arr.indexOf(3) !== -1) {
console.log('存在');
}
includes 直接返回布尔值,语义即“是否包含”:
const arr = [1, 2, 3, 4];
if (arr.includes(3)) {
console.log('存在');
}
支持 NaN 和负索引起始位置
includes 能正确识别 NaN,而 indexOf 不能(因为 NaN !== NaN):
[NaN].includes(NaN); // true [NaN].indexOf(NaN); // -1
它还支持从指定位置开始搜索(类似 indexOf(searchElement, fromIndex)):
[1, 2, 3, 2, 4].includes(2, 2); // true(从索引 2 开始找,找到第二个 2) [1, 2, 3, 2, 4].includes(2, 3); // true(从索引 3 开始,仍能找到) [1, 2, 3, 2, 4].includes(2, 4); // false(从索引 4 开始,后面无 2)
注意严格相等与对象引用
includes 使用 SameValueZero 算法(与 === 基本一致,但 0 和 -0 视为相等,NaN 自身相等):
-
[0, -0].includes(-0)→true -
[NaN].includes(NaN)→true - 对对象或数组,仍比较引用而非内容:
[{a:1}].includes({a:1})→false
实际使用建议
- 仅需判断“是否存在”时,优先用
includes(),可读性高、意图明确 - 需要获取元素位置时,才用
indexOf()或findIndex() - 处理可能含
NaN的数据时,includes()是更可靠的选择 - ES2016+ 环境可放心使用;如需兼容旧环境,可用 Babel 转译或简单 polyfill
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











