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

JavaScript猜拳游戏输入非法判断的if语句逻辑错误求助

解决石头剪刀布游戏的输入验证问题

嗨Morgan!很高兴看到你在Stack Overflow的第一篇帖子😊,咱们来快速搞定这个问题。

你的核心问题出在逻辑运算符的误用上——你当前用了||(逻辑或),但这里需要的是&&(逻辑与)。

为什么原来的代码会一直触发提示?

咱们拆解下你写的条件:

if(userChoice !== "PAPER" || userChoice !== "ROCK" || userChoice !== "SCISSORS")

不管用户输入什么,这个条件永远为true:

  • 如果输入"PAPER",userChoice !== "ROCK"是真,整个条件成立;
  • 如果输入"ROCK",userChoice !== "PAPER"是真,条件也成立;
  • 哪怕是合法输入,总有一个“不等于”的条件会满足,所以alert会被无差别触发。

修正后的代码

我们需要判断的是:用户输入同时不等于这三个合法选项,所以要用&&连接条件:

function userPlay() {
  let userChoice = prompt("Make your move")
  // 处理用户点击取消的情况,避免后续toUpperCase()报错
  if (userChoice === null) {
    alert("你取消了输入哦")
    return userPlay()
  }
  userChoice = userChoice.toUpperCase()
  console.log(userChoice)
  // 用&&替代||,判断输入同时不是三个合法选项
  if(userChoice !== "PAPER" && userChoice !== "ROCK" && userChoice !== "SCISSORS"){
    alert("Not an option")
    return userPlay() // 加return避免函数继续执行返回undefined
  }
  return userChoice
}

额外小优化

我还加了对prompt返回null的处理(用户点击取消按钮时),避免userChoice.toUpperCase()抛出错误。另外在递归调用userPlay()时加了return,确保函数不会在触发提示后继续执行到后面的return,避免返回意外的undefined。

这样修改后,只有当用户输入非合法选项时才会触发提示,合法输入就能正常返回啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 07:57:43