every()对应“与”逻辑(全真才真,遇假即停),some()对应“或”逻辑(一真即真,遇真即停);二者均支持短路,空数组时every返回true、some返回false,且回调必须明确返回truthy/falsy值。

every() 和 some() 是数组方法,天然支持短路逻辑:every 对应“与”(全部为真才返回 true,遇到假值立即停止),some 对应“或”(任一为真即返回 true,遇到真值立即停止)。
every() 实现“与”逻辑(全真才真,遇假即停)
它遍历数组,对每个元素执行回调函数。只要有一个回调返回 falsy 值(如 false、0、""、null、undefined、NaN),立刻返回 false,不再检查后续元素。
- 适合校验“所有项都满足条件”,比如表单所有字段非空、数组所有数字为正数
- 注意:空数组调用 every() 返回 true(逻辑上“所有零个元素都满足”成立)
- 示例:[2, 4, 6].every(x => x % 2 === 0) → true;[2, 3, 4].every(x => x % 2 === 0) → false(遇到 3 就停)
some() 实现“或”逻辑(一真即真,遇真即停)
它遍历数组,只要有一个回调返回 truthy 值(如 true、非零数、非空字符串等),立刻返回 true,后续不执行。
- 适合判断“是否存在满足条件的项”,比如数组里是否有负数、是否有用户已登录
- 空数组调用 some() 返回 false(没有元素为真)
- 示例:[1, -2, 3].some(x => x → true(遇到 -2 就停);[1, 2, 3].some(x => x > 10) → false(全遍历完才返回)
对比传统 for 循环,短路更直观
不用手动 break 或 flag 变量。every/some 把“条件聚合 + 短路控制”封装进语义化方法名中,代码更简洁可读。
- 想表达“所有用户年龄 ≥ 18”?直接用 users.every(u => u.age >= 18)
- 想表达“至少一个订单状态是 pending”?直接用 orders.some(o => o.status === 'pending')
- 避免写冗长的循环+if+break组合,也比 reduce((acc, cur) => acc && condition(cur), true) 更清晰
注意事项:回调必须有明确返回值
如果回调函数没写 return,或返回 undefined,会被转为 false,影响结果。
- 错误写法:arr.every(x => { console.log(x); }) → 全是 undefined → every 返回 false
- 正确写法:arr.every(x => { console.log(x); return x > 0; })
- 箭头函数单表达式可省略 return,但带大括号时必须显式 return










