JavaScript的数组every方法用于检测数组中的所有元素是否都满足指定条件,只要有一个元素不满足条件就会返回false,只有全部元素都满足条件才会返回true,是处理批量元素校验场景的常用方法。

every方法的基本语法
every方法接收两个参数,第一个是必填的回调函数,第二个是可选的执行回调时的this指向。回调函数本身会接收三个参数,分别是当前遍历的元素、当前元素的索引、原数组本身。
// 基本语法 arr.every(callback(element[, index[, array]])[, thisArg]) // 参数说明 // callback: 用于测试每个元素的函数,返回真值表示满足条件,否则不满足 // element: 当前遍历的数组元素 // index: 可选,当前元素的索引 // array: 可选,调用every方法的原数组 // thisArg: 可选,执行callback时的this指向
every方法的核心特性
- 只要遇到第一个不满足条件的元素,就会立即停止遍历,直接返回false,不会继续检测后面的元素
- 如果数组为空,直接返回true,不会执行回调函数
- 回调函数不会对数组中已删除或者从未赋值的元素调用
- 不会改变原数组
常见使用场景示例
检测所有元素是否为正数
这个场景是最基础的用法,判断数组里的所有数字是否都大于0。
const nums = [1, 2, 3, 4, 5]; // 检测所有元素是否都大于0 const allPositive = nums.every(item => item > 0); console.log(allPositive); // 输出 true const nums2 = [1, -2, 3, 4, 5]; const allPositive2 = nums2.every(item => item > 0); console.log(allPositive2); // 输出 false,因为第二个元素是-2不满足条件
检测对象数组的所有元素是否有指定属性
处理对象数组时,也可以用every方法检测所有对象是否都包含某个属性,或者某个属性的值符合要求。
const users = [
{ name: '张三', age: 18 },
{ name: '李四', age: 20 },
{ name: '王五', age: 22 }
];
// 检测所有用户年龄是否都大于等于18
const allAdult = users.every(user => user.age >= 18);
console.log(allAdult); // 输出 true
// 检测所有用户是否都有name属性
const allHasName = users.every(user => user.hasOwnProperty('name'));
console.log(allHasName); // 输出 true
空数组调用的特殊情况
当数组为空时,every方法会直接返回true,不会执行回调函数,这个特性需要注意,避免逻辑错误。
const emptyArr = []; const result = emptyArr.every(item => item > 0); console.log(result); // 输出 true,空数组默认返回true
指定this指向的场景
如果回调函数需要使用this,可以通过第二个参数指定this的指向,回调里的this就会指向传入的参数。
const checker = {
min: 10,
max: 20
};
const nums = [12, 15, 18];
// 检测所有元素是否在10到20之间,this指向checker对象
const inRange = nums.every(function(item) {
return item >= this.min && item <= this.max;
}, checker);
console.log(inRange); // 输出 true
every和其他数组检测方法的区别
JavaScript还有其他数组检测方法,和every容易混淆,这里通过表格对比它们的差异:
| 方法名 | 检测逻辑 | 空数组返回值 |
|---|---|---|
| every | 所有元素都满足条件才返回true | true |
| some | 只要有一个元素满足条件就返回true | false |
| filter | 返回所有满足条件的元素组成的新数组 | 空数组 |
使用注意事项
- 不要在every的回调函数里修改原数组,虽然不会报错,但可能导致检测结果不符合预期
- 如果检测条件比较复杂,建议把判断逻辑抽成单独的函数,提高代码可读性
- 空数组返回true的特性如果不符合业务需求,需要先判断数组长度再调用every方法
every方法是JavaScript数组操作的高频方法,掌握它的特性和使用场景,可以有效简化批量元素校验的代码逻辑,提升开发效率。
JavaScript数组every方法every方法用法数组元素检测修改时间:2026-06-30 20:48:37