实现1-30整数翻译为法语/德语的JavaScript代码调试求助
问题分析与解决方案
原有代码存在的问题
- 逻辑运算符使用错误:判断数字超出范围时使用了
number <1 && number > 30,该条件永远不可能成立(一个数无法同时小于1且大于30),应该使用逻辑或||;语言判断使用了单与&而非逻辑与&&,同时判断逻辑写反、字符串比较未加引号,完全不符合预期。 - 语法错误:代码中存在无意义的
undefined语句、if判断后多余的分号、字符串随意换行、在非循环/switch场景使用break等问题,直接运行会抛出语法错误。 - 输入未做类型校验:
prompt返回值为字符串类型,未做数字合法性校验,输入非数字内容也会进入后续逻辑,不符合需求。 - 流程不符合要求:需求明确输入不合法直接终止程序,原有代码会重复弹出输入框,且范围判断逻辑完全错误(
if (number <= 1 && number <= 30)等同于只要数字≤1就符合条件)。 - 变量使用不规范:同一变量重复使用
var声明,函数参数被内部声明的同名变量覆盖,变量作用域混乱。
符合需求的正确实现
function translate() { // 第一步:获取并校验数字输入 const inputNum = prompt("Enter text to translate?"); // 判断是否为纯数字字符 if (isNaN(Number(inputNum)) || !/^\d+$/.test(inputNum)) { alert("Please use digits"); return; } const num = parseInt(inputNum); // 判断数字范围是否符合要求 if (num < 1 || num > 30) { alert("Please type an integer number between 1 and 30"); return; } // 第二步:获取并校验语言输入 const lang = prompt("Please enter translation language, French or German?"); if (lang !== "French" && lang !== "German") { alert("only French or German is allowed"); return; } // 定义翻译映射数组 const french = ["Zéro", "Un", "Deux", "Trois", "Quatre", "Cinq", "Six", "Sept", "Huit", "Neuf", "Dix", "Onze", "Douze", "Treize", "Quatorze", "Quinze", "Sieze", "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"]; const german = ["Null", "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 result = lang === "French" ? french[num] : german[num]; alert(`翻译结果:${result}`); return result; } // 调用函数启动程序 translate();
内容的提问来源于stack exchange,提问作者mu joko
相关产品推荐
相关产品推荐

