Javascript 为什么是NaN';降低回报率?
我故意注释掉了Javascript 为什么是NaN';降低回报率?,javascript,reduce,Javascript,Reduce,我故意注释掉了返回值,因为它没有按预期工作。 如果我去掉返回和,它将返回正确的平均值。但这是我不明白的:当它在最后一个索引位置进入if时,返回显示NaN。 但是为什么它会返回NaN const mediaNumeros = numeros.reduce((sum, element, index, array) => { sum = sum + element; if (index == array.length - 1) { return Number((s
返回值
,因为它没有按预期工作。
如果我去掉返回和,它将返回正确的平均值。但这是我不明白的:当它在最后一个索引位置进入if时,返回显示NaN。
但是为什么它会返回NaN
const mediaNumeros = numeros.reduce((sum, element, index, array) => {
sum = sum + element;
if (index == array.length - 1) {
return Number((sum / array.length).toFixed(2));
}
// return sum;
}, 0)
让我们假设numeros的值为[8,90,0,7] 让我们看看每个迭代中发生了什么:- 在第一次迭代时: 计算
总和之前
- 数组:[8,90,0,7]
- 要素:8
- 索引:0
- 总数:0
sum
- 数组:[8,90,0,7]
- 要素:8
- 索引:0
- 总数:8
sum
:
在第二次迭代中:
计算总和之前
- 总和:
未定义
- 数组:[8,90,0,7]
- 要素:90
- 索引:1
sum
变得未定义,因为我们没有返回上一个函数调用的值。Js引擎不知道sum
的值是多少,因为前面的函数已经完成,其执行上下文被删除
计算完总和后
- 总和:
+90=undefined
NaN
- 数组:[8,90,0,7]
- 要素:90
- 索引:1
sum
的值变为NaN
因此它继续计算
sum
的值为NaN。让我们假设numeros的值为[8,90,0,7]
让我们看看每个迭代中发生了什么:-
在第一次迭代时:
计算总和之前
- 数组:[8,90,0,7]
- 要素:8
- 索引:0
- 总数:0
sum
- 数组:[8,90,0,7]
- 要素:8
- 索引:0
- 总数:8
sum
:
在第二次迭代中:
计算总和之前
- 总和:
未定义
- 数组:[8,90,0,7]
- 要素:90
- 索引:1
sum
变得未定义,因为我们没有返回上一个函数调用的值。Js引擎不知道sum
的值是多少,因为前面的函数已经完成,其执行上下文被删除
计算完总和后
- 总和:
+90=undefined
NaN
- 数组:[8,90,0,7]
- 要素:90
- 索引:1
sum
的值变为NaN
因此它继续计算sum
的值为NaN