在JavaScript开发中,判断数组是否包含某个指定元素是高频操作,不同的实现方法在语法、兼容性和适用场景上存在明显差异,下面详细介绍三种常用方法的对比。

方法一:includes方法
includes是ES6新增的数组实例方法,专门用于判断数组是否包含某个指定的值,返回值直接是布尔类型,使用起来非常直观。
语法说明
该方法接受两个参数,第一个是要查找的元素值,第二个是可选的起始查找索引,默认从索引0开始查找。
// 基础用法
const arr = [1, 2, 3, 'a', null, undefined, NaN];
console.log(arr.includes(2)); // true
console.log(arr.includes('a')); // true
console.log(arr.includes(4)); // false
// 指定起始查找索引
console.log(arr.includes(1, 1)); // false,从索引1开始查找,找不到1
// 特殊值判断
console.log(arr.includes(null)); // true
console.log(arr.includes(undefined)); // true
console.log(arr.includes(NaN)); // true,includes可以正确判断NaN
特点总结
- 返回值直接是布尔值,不需要额外做类型转换,使用逻辑简单
- 可以正确判断数组中是否存在NaN,这是它相比indexOf的核心优势
- 属于ES6新增方法,在IE等旧浏览器中不支持,需要配合polyfill使用
方法二:indexOf方法
indexOf是数组的经典方法,用于查找指定元素在数组中的第一个索引,通过判断返回的索引是否大于等于0来确定元素是否存在。
语法说明
同样接受两个参数,第一个是要查找的元素,第二个是可选的起始查找索引,默认从0开始。
const arr = [1, 2, 3, 'a', null, undefined, NaN];
console.log(arr.indexOf(2) !== -1); // true,索引为1,不等于-1说明存在
console.log(arr.indexOf('a') !== -1); // true,索引为3
console.log(arr.indexOf(4) !== -1); // false,返回-1说明不存在
// 特殊值判断
console.log(arr.indexOf(null) !== -1); // true
console.log(arr.indexOf(undefined) !== -1); // true
console.log(arr.indexOf(NaN) !== -1); // false,indexOf无法识别NaN
特点总结
- 兼容性较好,几乎所有浏览器都支持,不需要额外处理兼容问题
- 返回的是元素索引,除了判断存在性之外,还可以获取元素位置
- 无法正确判断NaN的存在,因为NaN和自身不相等,indexOf使用严格相等判断
- 返回值需要和-1做比较才能得到布尔结果,使用步骤比includes多一步
方法三:some方法
some是数组的迭代方法,会对数组中的每个元素执行回调函数,只要有一个元素满足回调函数的条件就返回true,否则返回false,适合复杂条件的包含判断。
语法说明
接受一个回调函数作为参数,回调函数接收当前元素、索引、原数组三个参数,还可以传入第二个参数指定回调函数的this指向。
const arr = [1, 2, 3, 'a', null, undefined, NaN]; // 基础判断元素是否存在 console.log(arr.some(item => item === 2)); // true console.log(arr.some(item => item === 4)); // false // 复杂条件判断,比如判断数组中是否有大于2的数字 console.log(arr.some(item => typeof item === 'number' && item > 2)); // true // 判断NaN是否存在,需要在回调中自定义判断逻辑 console.log(arr.some(item => Number.isNaN(item))); // true
特点总结
- 支持自定义判断逻辑,适合需要复杂条件匹配的场景,灵活性最高
- 可以正确判断NaN,只需要在回调中使用Number.isNaN等方法即可
- 兼容性较好,ES5就支持,大部分浏览器都可以使用
- 如果只是简单判断元素是否存在,写法比includes和indexOf更繁琐,性能也略低
三种方法对比总结
我们可以通过下面的表格更直观地看到三种方法的差异:
| 对比维度 | includes方法 | indexOf方法 | some方法 |
|---|---|---|---|
| 返回值 | 直接返回布尔值 | 返回元素索引,需和-1比较 | 返回布尔值 |
| NaN判断 | 支持 | 不支持 | 自定义逻辑可支持 |
| 兼容性 | ES6新增,旧浏览器不支持 | 全浏览器支持 | ES5支持,兼容性较好 |
| 适用场景 | 简单判断元素是否存在,无需兼容旧环境 | 需要获取元素索引,或需要兼容旧浏览器 | 复杂条件匹配判断 |
实际开发中,如果不需要兼容IE等旧浏览器,且只是简单判断元素是否存在,优先选择includes方法,语法更简洁;如果需要兼容旧环境,或者需要获取元素的索引位置,选择indexOf方法;如果需要复杂的匹配规则,比如判断数组中是否有满足某个条件的元素,选择some方法更合适。
JavaScript数组包含元素includes方法indexOf方法some方法修改时间:2026-06-13 01:57:33