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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:36:03