使用Rest运算符的JavaScript求和函数返回NaN问题排查
问题分析与修复
代码里的两个核心问题
- 空数组判断错误:
args == []永远不会成立,因为数组是引用类型,两个独立的数组对象无法通过==判定相等。正确的判断方式是检查数组长度args.length === 0。 - for...of循环使用错误:
for (let i of args)里的i是数组的元素值,不是索引。比如调用sum(1,2)时,第一次迭代i=1,你取args[i]等于args[1]即2,sum变成2;第二次迭代i=2,args[2]是undefined,相加后sum就变成NaN。而且i++完全多余,for...of会自动遍历所有元素。
修复后的代码
function sum(...args) { if (args.length === 0) { return 0; } let total = 0; for (let num of args) { total += num; } return total; }
更简洁的写法(可选)
利用数组的reduce方法可以一行搞定:
function sum(...args) { return args.reduce((total, num) => total + num, 0); }
内容的提问来源于stack exchange,提问作者user20309501
相关产品推荐
相关产品推荐

