为何JavaScript中array.reduce调用Math.max会返回NaN?
为什么直接把Math.max传给Array.reduce会返回NaN?
先看你给出的代码:
const ar = [1, 2, 3]; ar.reduce(Math.max, 0); // 返回NaN ar.reduce((a, c) => Math.max(a, c), 0); // 正常返回3
原因很直白:
Array.reduce调用回调函数时,会自动传入四个参数:累计值、当前元素、当前索引、原数组。- 当你直接把
Math.max作为回调传入时,它会接收到全部四个参数。第一次执行时实际是Math.max(0, 1, 0, [1, 2, 3])——这里第四个参数是数组,不属于有效数字,Math.max遇到非数字参数直接返回NaN,后续所有基于NaN的计算结果自然也都是NaN。 - 而用箭头函数包裹时,我们只把前两个有用的参数(累计值和当前元素)传给
Math.max,相当于每次只做两个数字的比较,不会带入索引、数组这类干扰项,因此能正确算出数组的最大值。
内容的提问来源于stack exchange,提问作者piemekanika
相关产品推荐
相关产品推荐

