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

罗马数字转换器代码在freeCodeCamp报ReferenceError: key is not defined求助

解决freeCodeCamp环境中"ReferenceError: key is not defined"的问题

问题原因

你的代码在VS Code中正常运行,但在freeCodeCamp报错,核心原因是循环中的解构变量未显式声明。VS Code使用的Node.js环境(或现代浏览器)允许在for...of循环的解构语法中隐式创建变量,但freeCodeCamp的执行环境可能启用了更严格的模式,或者使用了对ES6解构支持不完全的旧版JS引擎,导致未声明的key被识别为未定义的变量。

修复方案

只需要在for...of循环的解构变量前添加const(或let)声明即可:

function convertToRoman(num) {
  let romanNumerals = {
    M: 1000,
    CM: 900,
    D: 500,
    CD: 400,
    C: 100,
    XC: 90,
    L: 50,
    XL: 40,
    X: 10,
    IX: 9,
    V: 5,
    IV: 4,
    I: 1
  }

  let answer = "";
  let numTemp = num;
  let decimal = 0;
  let remainder = 0;

  if (num == 0) answer = 0;
  if (num > 0)  {
    let romanArr = Object.entries(romanNumerals);
    // 添加const声明解构变量
    for (const [key, value] of romanArr) {
      if (numTemp / value >= 1) {
        decimal = Math.floor(numTemp / value);
        remainder = numTemp % value;
        answer += key.repeat(decimal);
        numTemp = remainder;
      } 
    }
  }
  return answer;
 }
 
console.log(convertToRoman(2014));
console.log(convertToRoman(3999));

额外优化建议

  • 罗马数字中没有0的表示,当num为0时返回"0"不符合罗马数字规则,可根据需求调整为返回空字符串或提示信息。
  • 可以简化变量逻辑,减少函数内全局变量数量:
for (const [key, value] of romanArr) {
  if (numTemp >= value) {
    const count = Math.floor(numTemp / value);
    answer += key.repeat(count);
    numTemp %= value;
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:20:32