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

JavaScript技术问询:为何石头剪刀布游戏的switch case语句异常?

问题原因解析

你的switch语句写法存在两个致命问题,导致逻辑完全不符合预期:

1. 逗号运算符的误用

switch (p1,p2)里的逗号运算符是JavaScript的序列运算符,它会依次执行逗号两边的表达式,最终返回最后一个表达式的值。也就是说,你的switch实际上是在对p2的值做判断,完全忽略了p1,这直接导致所有需要结合p1、p2一起判断的逻辑全部失效。

2. 逻辑与&&的误解

case里的"scissors" && "paper"这种写法,逻辑与运算符在处理非空字符串时,会返回最后一个“真值”。因为所有非空字符串都是布尔真值,所以"scissors" && "paper"的结果就是"paper","scissors" && "rock"的结果是"rock"——这意味着你的case实际上只在判断p2的值,和p1完全无关,自然会出现大量错误匹配。

修正后的switch实现

要让switch能同时判断p1和p2的组合,你需要把两个参数合并成一个唯一的标识,比如拼接成字符串:

let rps = (p1, p2) => {
  switch (`${p1},${p2}`) {
    case "scissors,paper":
      return "Player 1 won!";
    case "scissors,rock":
      return "Player 2 won!";
    case "scissors,scissors":
      return "Draw!";
    case "paper,paper":
      return "Draw!";
    case "paper,scissors":
      return "Player 2 won!";
    case "paper,rock":
      return "Player 1 won!";
    case "rock,rock":
      return "Draw!";
    case "rock,paper":
      return "Player 2 won!";
    case "rock,scissors":
      return "Player 1 won!";
  }
};

这样每个case对应p1和p2的唯一组合,switch就能正确匹配判断了。另外注意,return语句已经会跳出函数,所以break在这里是多余的,可以直接去掉。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:13:20