JavaScript计算数组平均值:空数组返回NaN而非0的问题排查
问题排查与修复
核心问题
你的代码里的条件判断犯了两个关键错误:
- 误用**赋值运算符
=**代替比较逻辑:if ((numbers = []))这行代码是把空数组赋值给numbers,而非判断输入数组是否为空; - 即便改成比较运算符,直接用
numbers === []也不成立:数组是引用类型,两个空数组的内存地址不同,[] === []结果为false,导致空数组的判断永远不会触发。
当输入空数组时,代码会执行到total / numbers.length,此时numbers.length为0,0除以0会得到NaN,这就是问题根源。
修复后的代码
直接通过数组长度判断是否为空即可:
function calculateAverage(numbers) { if (numbers.length === 0) return 0; let total = 0; for (let num of numbers) { total += num; } let result = total / numbers.length; return result; }
可选简洁写法
如果想简化总和计算,可以使用Array.reduce:
function calculateAverage(numbers) { if (numbers.length === 0) return 0; const total = numbers.reduce((sum, num) => sum + num, 0); return total / numbers.length; }
内容的提问来源于stack exchange,提问作者Antrhopos
相关产品推荐
相关产品推荐

