JS数组求和函数问题:空参数/空数组调用时未返回0求解答
问题分析与修复方案
你的代码有几个关键问题,导致调用无参数的sumArray()时返回10而非预期的0:
参数被强制覆盖:函数内部用
var numbers = [1, 2, 3, 4];重新声明了变量,直接覆盖了传入的参数。不管调用时有没有传参,这个变量都会被固定赋值为这个数组,所以第一个if(numbers !== undefined)永远为真,直接返回数组求和结果10。数组判断逻辑错误:
numbers === []这种写法永远不会成立——数组是引用类型,===比较的是内存地址,哪怕两个数组内容完全一样,地址也不相同,所以这个判断永远为假。另外你在else if后面多写了一个分号,导致后面的{return 0}变成了独立代码块,和条件判断完全无关。逻辑顺序颠倒:应该先处理无参数、空数组这类特殊情况,再执行正常数组的求和逻辑。
修复后的代码:
function sumArray(numbers) { // 处理未传参、传入undefined或空数组的情况 if (!numbers || numbers.length === 0) { return 0; } // 正常数组求和 return numbers.reduce((a, b) => a + b, 0); } console.log(sumArray()); // 输出0 console.log(sumArray([])); // 输出0 console.log(sumArray([1,2,3,4])); // 输出10
修复说明:
- 删除了函数内部覆盖参数的
var numbers声明,保留传入的原始参数 - 用
!numbers判断未传参或传入undefined的情况,用numbers.length === 0判断空数组 - 调整逻辑顺序,先处理特殊情况返回0,再执行正常求和
- 移除了多余的分号,让代码逻辑连贯
内容的提问来源于stack exchange,提问作者Diegozermeno
相关产品推荐
相关产品推荐

