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

为何Array.prototype.filter中带大括号的箭头函数返回空数组?

箭头函数带大括号与不带大括号的差异原因

这是箭头函数的语法规则导致的两种不同行为:

  • 不带大括号的简洁体写法:这种写法下,箭头右侧的表达式结果会被自动作为函数的返回值,无需手动写return。你第二个示例里的i => i % 2 == 0,本质上等价于i => { return i % 2 == 0 },所以filter能正确接收到判断奇偶的布尔值,最终筛选出[0,2]。

  • 带大括号的块体写法:当箭头函数使用大括号包裹代码时,就进入了块级作用域模式,此时必须显式使用return语句来指定返回值。你第一个示例里的i => {i % 2 == 0},只是在块内执行了一个比较表达式,但没有返回任何内容,函数默认返回undefined。而Array.prototype.filter会把undefined判定为false,所有元素都不满足筛选条件,因此返回空数组。

如果要保留大括号写法,只需要补上return即可:

(function (){
  console.log([0, 1, 2, 3].filter(i => { return i % 2 == 0 }));
})();
// 输出: [0, 2]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:25:45