Web前端:JavaScript every()迭代方法
1. every()
是什么?
every()
是 JavaScript 数组(Array)提供的一个内置高阶函数,用于检测数组中是否所有元素都满足指定条件。它会对数组的每个元素执行一个测试函数,并根据测试结果返回一个布尔值(true
或 false
)。
2. 核心作用
-
验证数组元素的一致性:检查数组中的每个元素是否都符合某个条件。
-
返回布尔值:
-
如果所有元素都满足条件 → 返回
true
。 -
只要有一个元素不满足条件 → 立即停止遍历,返回
false
。
-
3. 语法解析
const result = array.every((currentElement, index, array) => {// 测试逻辑,返回 true/false
}, thisArg);
参数 | 说明 |
---|---|
currentElement | 当前遍历的元素(必填) |
index | 当前元素的索引(可选) |
array | 调用 every() 的原始数组(可选) |
thisArg | 执行回调函数时用作 this 的值(可选,很少用) |
4. 关键特性
-
短路运算:遇到第一个不满足条件的元素时,立即停止遍历(类似逻辑与
&&
)。 -
不改变原数组:纯函数,不影响原始数组。
-
空数组处理:若数组为空,默认返回
true
(因为“没有元素不满足条件”)。
5. 实例演示
示例 1:检查所有元素是否为正数
const numbers = [2, 4, 6, 8, 10];
const allPositive = numbers.every(num => num > 0);
console.log(allPositive); // true(所有元素 > 0)
示例 2:检测数组元素类型
const data = ["apple", "banana", "cherry"];
const allStrings = data.every(item => typeof item === "string");
console.log(allStrings); // true(所有元素都是字符串)
示例 3:短路验证(遇到 false
即停止)
const nums = [10, 20, 30, 5, 40];
nums.every((num, index) => {console.log(`检查第 ${index} 个元素: ${num}`);return num > 10;
});
// 输出:
// 检查第 0 个元素: 10 → 10>10? false → 停止遍历!
// 最终返回 false
示例 4:空数组的特殊情况
const emptyArray = [];
const result = emptyArray.every(num => num > 0);
console.log(result); // true(没有元素可验证,默认通过)
6. 实际应用场景
1.表单验证
检查表单输入是否全部非空:
const inputs = ["John", "Doe", "john@example.com"];
const allFilled = inputs.every(input => input.trim() !== "");
console.log(allFilled); // true
2.权限校验
验证用户是否拥有所有权限:
const userPermissions = ["read", "write", "delete"];
const requiredPermissions = ["read", "write"];
const hasAllPermissions = requiredPermissions.every(perm => userPermissions.includes(perm)
);
console.log(hasAllPermissions); // true
3.数据一致性检查
确保数组中所有对象都有 id
属性:
const products = [{ id: 1, name: "Phone" },{ id: 2, name: "Laptop" }
];
const allValid = products.every(product => "id" in product);
console.log(allValid); // true
7. 与 some()
的对比
方法 | 作用 | 返回值条件 |
---|---|---|
every() | 所有元素满足条件? | 全部满足 → true |
some() | 至少一个元素满足条件? | 有一个满足 → true |
// 对比示例
const ages = [18, 22, 25];
const allAdult = ages.every(age => age >= 18); // true
const hasTeen = ages.some(age => age < 20); // true
8. 兼容性
-
支持所有现代浏览器(Chrome、Firefox、Edge 等)及 IE9+。
-
旧版 IE 可用 Polyfill 支持。
总结
-
every()
是“全真为真”:适合需要严格验证所有元素的场景。 -
短路特性优化性能:避免不必要的遍历。
-
空数组返回
true
:注意这一边界情况。 -
搭配箭头函数更简洁:
arr.every(item => condition)
。