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

为何这段JavaScript代码必须新建变量才能正常运行?

问题:为何直接执行Number(arr.join(""))后返回arr无法得到正确结果?

我在完成Codewars编程挑战时,需要编写一个函数:将输入数字的每一位分别平方后拼接成新数字。例如输入232,应返回494(2²=4,3²=9,2²=4,拼接后为494)。我写出了可行代码,但如果不新建变量,直接执行Number(arr.join(""))后返回arr,结果仍是分散的数组而非完整数字。为什么必须新建变量才能让代码正常工作?

可行代码

function squareDigits(num){
  let numStr = String(num)
  let split = numStr.split("");
  let arr = [];
  for(let i = 0; i <= split.length-1; i++){
    let sqr = Math.pow(split[i],2);
    arr.push(sqr);
  }
  let join = Number(arr.join(""));
  return join
}

console.log(squareDigits(232)) // 输出494

错误代码

function squareDigits(num){
  let numStr = String(num)
  let split = numStr.split("");
  let arr = [];
  for(let i = 0; i <= split.length-1; i++){
    let sqr = Math.pow(split[i],2);
    arr.push(sqr);
  }
  Number(arr.join(""));
  return arr
}

console.log(squareDigits(232)) // 输出[4,9,4]

解答

核心问题不是“必须用变量”,而是你没返回转换后的结果:

  • Number(arr.join(""))这个操作会生成一个新的数字值,但它不会修改原数组arr——原数组还是存着各位平方后的单个数字,不会变成拼接后的完整数字。
  • 错误代码里,你执行完转换后直接返回了原数组arr,自然得到的是分散的数组;而可行代码里,你把转换后的结果存在变量join里,返回这个变量,所以能得到正确数字。

其实不用变量也能正常工作,只要直接返回转换后的结果就行:

function squareDigits(num){
  let numStr = String(num)
  let split = numStr.split("");
  let arr = [];
  for(let i = 0; i <= split.length-1; i++){
    let sqr = Math.pow(split[i],2);
    arr.push(sqr);
  }
  // 直接返回转换后的结果,无需额外变量
  return Number(arr.join(""));
}

console.log(squareDigits(232)) // 输出494

总结:Number(arr.join(""))是生成新值,原数组不会被改变,你需要返回这个新值,而不是原来的数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:42:29