You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS数组求和异常:输入1-5预期输出15却得到012345求排查

解决数组元素求和时得到字符串拼接结果的问题

嘿,这个问题我太熟悉了——你遇到的是JavaScript里类型混淆导致的字符串拼接问题,不是数值相加!

问题根源

prompt()方法返回的是字符串类型的输入值,哪怕你输入的是数字,它也会以字符串形式存储。当你执行sum += numbers[i]时:

  • 初始sum是数字0,第一次加上字符串"1",JavaScript会自动把数字转为字符串,变成"01";
  • 之后每一次循环都是把新的字符串拼接到后面,最终就得到了"012345",而不是预期的数值和15。

修复方案

这里有两种简单的修复方式,任选其一都能解决问题:

方案1:存储输入时直接转为数字

在把输入值push到数组前,用parseInt()(处理整数)或者Number()(通用数字转换)把字符串转为数字:

<html>
<head> </head>
<body>
<script>
var numbers=[];
var sum=0;
for (var i=0;i<5;i++) {
    // 用parseInt转换时记得加第二个参数10,表示十进制
    numbers.push(parseInt(prompt('Enter Your Numbers'), 10));
    sum += numbers[i];
}
function getSumOfArray() {
    return sum;
}
document.write("The Sum of Array: "+getSumOfArray()+"<br />");
</script>
</body>
</html>

方案2:相加时转换类型

如果需要保留数组里的原始字符串(虽然这里没必要),可以在相加前把元素转为数字:

<html>
<head> </head>
<body>
<script>
var numbers=[];
var sum=0;
for (var i=0;i<5;i++) {
    numbers.push(prompt('Enter Your Numbers'));
    // 转换为数字后再执行加法
    sum += Number(numbers[i]);
}
function getSumOfArray() {
    return sum;
}
document.write("The Sum of Array: "+getSumOfArray()+"<br />");
</script>
</body>
</html>

额外优化建议

如果想让代码更健壮,可以加个输入验证,防止用户输入非数字内容导致结果异常:

var input = prompt('Enter Your Numbers');
var num = Number(input);
// 检查输入是否为有效数字
if (!isNaN(num)) {
    numbers.push(num);
    sum += num;
} else {
    alert('请输入有效的数字哦!');
    i--; // 让循环回退一次,重新获取输入
}

内容的提问来源于stack exchange,提问作者user1857068

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:12:55