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

JavaScript新手编写多语言数字翻译函数返回undefined问题求助

问题原因与修复方案

核心错误点

  • 执行顺序错误:代码最开头就调用translate()给translatedNumber赋值,此时还没有获取用户输入的数字和语言,调用时无任何参数传入,函数自然返回undefined。
  • 后续调用translate()时未传参、也未接收返回值:你在拿到用户输入的语言后调用了一次translate(),但没有把number、language两个必要参数传给函数,也没有把函数返回的翻译结果赋值给translatedNumber变量,原来的变量还是第一次调用得到的undefined。
  • 函数参数冗余:translate的参数里列了translatedNumber、french、german,其中french、german是全局定义的数组不需要额外传递,translatedNumber是函数内部要返回的结果,不需要作为参数传入。
  • 浏览器环境不存在exit()方法:你用的exit()是Node.js的方法,在浏览器里运行会直接报错,打断正常执行流程。
  • 输入的数字未做类型转换:prompt返回的是字符串类型,虽然做了isNaN判断,但最好显式转成数字,避免数组索引取值时出现异常。

修复后可运行代码

// 全局定义语言数组
const german = ["eins","zwei","drei","vier","fünf","sechs","sieben","acht","neun","zehn","elf","zwölf","dreizehn","vierzehn","fünfzehn","sechzehn","siebzehn","achtzehn","neunzehn","zwanzig","einundzwanzig","zweiundzwanzig","dreiundzwanzig","vierundzwanzig","fünfundzwanzig","sechsundzwanzig","siebenundzwanzig","achtundzwanzig","neunundzwanzig","dreißig"];
const french = ["un","deux","trois","quatre","cinq","six","sept","huit","neuf","dix","onze","douze","treize","quatorze","quinze","seize","dix-sept","dix-huit","dix-neuf","vingt","vingt et un","vingt-deux","vingt-trois","vingt-quatre","vingt-cinq","vingt-six","vingt-sept","vingt-huit","vingt-neuf","trente"];

// 先获取用户输入的数字,转成数字类型
let number = Number(prompt("Please enter a number between 1-30 to be translated"));
if (number > 30 || number < 1) {
    alert("Please enter a number between 1-30");
    throw new Error("输入不符合要求");
} else if(isNaN(number)){
    alert("Please enter digits");
    throw new Error("输入不符合要求");
}

// 获取用户输入的语言,统一转小写避免大小写匹配问题
let language = prompt("Translated into what language? French/German").toLowerCase();
if (language !== "german" && language !== "french"){
    alert("Only French or German is allowed");
    throw new Error("输入不符合要求");
}

// 翻译函数,只传必要参数number和language
function translate(number, language){
    if(language === "german"){
        return german[number - 1];
    } else if(language === "french"){
        return french[number - 1];
    }
}

// 调用翻译函数,接收返回值
const translatedNumber = translate(number, language);
alert("The translation is " + translatedNumber);

额外优化提示

  • 原法语数组里第二个词拼写有误,原代码写的是duex,正确拼写是deux,上述修复代码已经做了修正。
  • 原德语数组里的30拼写dreiβig也可以替换为标准写法dreißig,修复代码也做了对应调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:36:03