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

为何Number()函数在该JavaScript代码中未生效?求解决方案

问题分析

你的代码里Number(nums[i])没有生效的核心原因是:Number()函数不会修改传入的原变量,它只是返回一个转换后的数值结果。你只是调用了这个函数,但没有把返回值保存下来,所以nums[i]依然是字符串类型,和初始值sum=0相加时,JS会自动把sum转为字符串做拼接,最终得到的是"01148"这类结果,而非数字之和。

修复方案

方案1:保存Number()的转换结果

把转换后的数值赋值给临时变量,再参与求和:

function sumDigits(num) {
  let nums = num.toString();
  let sum = 0;
  
  for(let i = 0; i < nums.length; i++){
       const digit = Number(nums[i]); // 存储转换后的数值
       sum += digit;
  }

  return sum;
}

var output = sumDigits(1148);
console.log(output); // --> 14

方案2:用一元加号+快速转换

一元加号是JS里转换字符串为数值的简洁写法,效果和Number()一致:

function sumDigits(num) {
  let nums = num.toString();
  let sum = 0;
  
  for(let i = 0; i < nums.length; i++){
       sum += +nums[i]; // 直接通过一元加号转数值
  }

  return sum;
}

方案3:使用parseInt

注意要传入第二个参数10指定十进制,避免遇到以0开头的字符串时被解析为八进制:

function sumDigits(num) {
  let nums = num.toString();
  let sum = 0;
  
  for(let i = 0; i < nums.length; i++){
       sum += parseInt(nums[i], 10);
  }

  return sum;
}

方案4:纯数学运算(无需字符串转换)

如果不想把数字转成字符串,可以通过取余和整除操作直接提取每一位数字,还能自然处理负数:

function sumDigits(num) {
  let sum = 0;
  num = Math.abs(num); // 处理负数,确保取余结果正确
  
  while(num > 0) {
    sum += num % 10; // 取最后一位数字
    num = Math.floor(num / 10); // 移除最后一位数字
  }
  
  return sum;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:01:27