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

关于Array.isArray()与Array.every()结合使用的技术疑问

为什么Array.every()直接传入Array.isArray能正常工作?

嘿,这个问题问得挺有意思的!咱们一步步拆解清楚:

首先得搞懂Array.every()给回调函数传了啥:它遍历数组时,会给每一个回调传递三个参数——当前元素、元素索引、原数组本身。

然后看Array.isArray()的特性:这个方法只关心第一个传入的参数,判断它是不是数组,后面再多传其他参数,它都会直接忽略,完全不影响返回结果。

回到你的代码场景:
你原本写的箭头函数(val, index, arr) => { return Array.isArray(val); },本质就是把every()传过来的第一个参数val丢给Array.isArray做判断。而当你直接把Array.isArray作为回调传给every()时,every()依然会给它传三个参数,但Array.isArray只拿第一个参数来判断,后面的索引和原数组根本不用管,所以逻辑和你写箭头函数的版本完全一致!

咱们可以写个小例子验证一下:

const targetObj = [[1,2],[3],4];

// 箭头函数版本
const result1 = targetObj.every((val, index, arr) => { 
  return Array.isArray(val); 
});

// 直接传Array.isArray的版本
const result2 = targetObj.every(Array.isArray);

console.log(result1, result2); // 输出 false false,结果完全相同

说白了,这就是个参数匹配的巧合——Array.isArray的参数需求刚好和every()传递的第一个参数契合,所以可以省略箭头函数的包裹,直接把它当回调用,既简洁又不影响功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:31:37