You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript every()方法返回值与console.log输出不一致问题

问题解答:为什么every()返回false但console.log显示true?

核心问题分析

你的代码逻辑存在两个容易忽略的细节:

  • 最后一个元素的比较失效:当every()遍历到数组最后一位时,index + 1超出了数组的下标范围,arr[index + 1]会返回undefined。数字和undefined做大小比较时,undefined会被转换为NaN,任何数字与NaN的比较结果都是false。而every()的规则是只要有一个回调返回false,整体就返回false,所以最终returnRes是false。
  • console.log的返回值误导判断:在consoleLogRes的回调中,console.log(value > arr[index + 1])只是打印出比较结果,但console.log()本身的返回值是undefined(这才是every()实际判断的值)。你在控制台看到的true只是前两次比较的输出,实际上遍历到最后一个元素时,console.log()也会打印出false,只是你可能没留意到这一行。

修正方案

要正确判断“每个元素都大于其后一个元素”,需要限制遍历范围,只比较到倒数第二个元素:

const arr = [3, 2, 1];
const returnRes = arr.every((value, index, arr) => {
  // 最后一个元素没有后续元素,直接返回true
  if (index === arr.length - 1) return true;
  return value > arr[index + 1];
});

console.log(returnRes); // 输出 true

或者更简洁的写法:

const arr = [3, 2, 1];
const returnRes = arr.every((value, index, arr) => 
  index === arr.length - 1 || value > arr[index + 1]
);

console.log(returnRes); // 输出 true

内容的提问来源于stack exchange,提问作者JpCano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:40:18