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

为何两个调用every()方法的函数返回结果不同?求解答

为什么两个看似相同的数组检查函数返回结果不同?

这是一个很容易踩的箭头函数语法坑!问题出在箭头函数的返回值规则上,咱们来拆解一下你的代码:

首先看你提供的代码片段:

let arr = [ {first: 'Jules', last:'Atkinson'}, {first: 'Ralf', last:'Benson', isInstructor: true}, {first: 'Quinten', last:'Pottinger'}, {first: 'Linden', last:'Knaggs', isInstructor: true} ]
function getCertainKey1(arr, key) { // 返回FALSE
 return arr.every((val) => { key in val; });
}
function getCertainKey2(arr, key) { // 返回TRUE
 return arr.every(val => key in val);
}
console.log(getCertainKey1(arr, 'first'));
console.log(getCertainKey2(arr, 'first'));

核心差异:箭头函数的大括号与返回值

  • 对于getCertainKey2里的箭头函数val => key in val:
    当箭头函数没有用大括号{}包裹函数体时,它会自动返回箭头后面表达式的计算结果,也就是key in val的布尔值(这里每个元素都有first键,所以每次都返回true,every最终返回true)。

  • 对于getCertainKey1里的箭头函数(val) => { key in val; }:
    一旦用大括号包裹函数体,箭头函数就不会自动返回值了——你必须显式写出return语句。这里你只写了key in val;但没有返回它,所以这个箭头函数的默认返回值是undefined。而every方法要求每个回调函数返回真值(truthy value),undefined属于假值(falsy),所以整个every调用直接返回false。

如果要让getCertainKey1和getCertainKey2行为一致,你需要修改成这样:

function getCertainKey1(arr, key) {
 return arr.every((val) => { return key in val; });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:47:37