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

JavaScript中sumDigits函数处理负数返回NaN的修复方案

故障根因
  • 传入负数参数时,执行num.toString()生成的字符串首位会附带-负号字符
  • 循环遍历到该负号字符时,parseInt('-')的返回值为NaN
  • NaN与任意数值相加的结果仍为NaN,会直接污染整个累加值,最终函数返回非数值结果
  • 额外隐患:原代码中newStr未添加作用域声明,会意外挂载到全局作用域,存在潜在的变量污染风险
修复实现方案

核心逻辑为提取输入数值每一位的阿拉伯数字做累加,数值本身的正负属性不纳入求和计算范围

  • 对输入值先取绝对值,从源头消除负号对字符串转换环节的干扰
  • 为所有中间变量补充块级作用域声明,避免全局变量污染
  • 遍历字符串时,可直接使用Number()将数字字符转为数值参与累加,可读性更强
function sumDigits(num) {
  // 取绝对值,彻底排除负号的影响
  const safeNum = Math.abs(num);
  const numStr = safeNum.toString();
  let sum = 0;
  for (let i = 0; i < numStr.length; i++) {
    sum += Number(numStr[i]);
  }
  return sum;
}

// 测试验证
console.log(sumDigits(1148)); // 输出 14,与原正数场景结果一致
console.log(sumDigits(-1148)); // 输出 14,解决原负数场景的NaN问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 03:06:10