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
相关产品推荐
相关产品推荐

