关于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
相关产品推荐
相关产品推荐

