为什么箭头函数带大括号时Array.prototype.every()返回false,不带则返回true
问题原因:箭头函数的返回值规则差异
这一差异是箭头函数的两种写法的返回值规则不同导致的:
- 当箭头函数不使用大括号包裹函数体时,默认启用隐式返回规则:会直接将函数体唯一一行表达式的执行结果作为返回值返回。
- 当箭头函数使用大括号包裹函数体时,属于块级作用域显式写法,必须手动声明
return语句才会返回对应值,没有声明return的函数默认返回undefined。
对应到你的代码逻辑:
isPresentInBothArrays1的回调使用了大括号包裹逻辑,但是没有加return语句,每次迭代的回调都返回undefined,而undefined属于布尔假值。Array.every()方法只要遇到一个返回假值的回调就会终止迭代,直接返回false。isPresentInBothArrays2的回调使用无大括号的简写写法,隐式返回array1.includes(number)的布尔结果,三次迭代的结果都为true,所以every方法最终返回true。
如果要让带大括号的写法返回正确结果,补充return语句即可:
const isPresentInBothArrays1 = array2.every((number)=>{ return array1.includes(number); });
内容的提问来源于stack exchange,提问作者Mosco_P
相关产品推荐
相关产品推荐

