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
相关产品推荐
相关产品推荐

