为何JavaScript中Array.every()加箭头函数大括号返回结果异常?
为什么带大括号的箭头函数版本返回False?
这是箭头函数语法里一个很容易踩的小坑,咱们来一步步把它说清楚:
箭头函数的两种语法差异
箭头函数有两种写法,核心区别就在返回值的处理上:
简洁体(不带大括号):如果函数体只有一条表达式,不需要手动写
return,表达式的计算结果会自动作为函数的返回值。比如你写的正确版本:x=> x % 2 === 0这里
x % 2 === 0的布尔结果会直接返回给every方法,每个元素都能被正确判断是否为偶数,最终自然返回True。块体(带大括号):一旦给箭头函数加上大括号,就变成了块级函数体,这时候必须显式写
return语句才能返回值。你的带大括号版本:x=> { x % 2 === 0 };这里只是执行了
x % 2 === 0这个表达式,但没有把它的结果返回出去,所以这个箭头函数默认返回undefined。
为什么every会返回False?
Array.prototype.every()方法对回调函数的返回值有明确要求:它需要一个布尔值来判断当前元素是否符合条件。如果回调返回的是undefined(或者其他会被隐式转为false的值,比如null、0),every会把它当成false处理,一旦遇到第一个“假值”就会停止遍历,最终返回False。
在你的带大括号版本里,每个元素对应的回调都返回undefined,所以every直接判定不符合“所有元素都是偶数”的条件,返回了False。
修正带大括号的写法
如果一定要用大括号的写法,只要补上return就行:
function checkAllEven(arr) { return arr.every(x=> { return x % 2 === 0 }); }
这样就能和不带大括号的版本得到完全一致的结果啦。
内容的提问来源于stack exchange,提问作者Ravi Sharma
相关产品推荐
相关产品推荐

