Codecademy石头剪刀布游戏出现Function 'undefined'报错问题
问题根因
getUserChoice函数仅在输入为rock/paper/scissors三个合法值时显式返回对应字符串,非法输入的else分支仅执行了console.log打印错误提示,没有写return语句。JavaScript规则中,函数没有显式return语句时,默认返回值为undefined。- 调用代码使用
console.log(getUserChoice('papers')),相当于把函数的返回值(非法输入场景下就是undefined)又打印了一次,因此会出现先输出错误提示、再输出非预期undefined的现象。
修复方案
方案1(更规范,推荐):函数只做逻辑判断,返回处理结果,由外层统一控制打印逻辑
const getUserChoice = (userInput) => { userInput = userInput.toLowerCase(); // 用数组includes简化多条件判断 if (['rock', 'paper', 'scissors'].includes(userInput)) { return userInput; } // 非法输入返回错误对象作为标识 return new Error('Please enter rock, paper, or scissors.'); } // 外层调用后判断结果类型做对应处理 const choice = getUserChoice('papers'); if (choice instanceof Error) { console.log(choice.message); } else { console.log(choice); }
方案2(兼容原有写法,改动最小):保留函数内打印错误的逻辑,外层调用时避免重复打印
const getUserChoice = (userInput) => { userInput = userInput.toLowerCase(); if (userInput === 'rock' || userInput === 'paper' || userInput === 'scissors') { return userInput; } else { console.log('Please enter rock, paper, or scissors.'); } } const choice = getUserChoice('papers'); // 仅当函数有返回值(输入合法)时才打印 if (choice) { console.log(choice); }
内容的提问来源于stack exchange,提问作者Mai Ha
相关产品推荐
相关产品推荐

