JS猜拳游戏判断异常求助:不同值字符串被判定相等
JavaScript猜拳游戏平局错误的修复方案
核心问题分析
你遇到的判定错误,根源有三个:
- 调用
playRound时未传递参数:你在game函数最后调用playRound()时没有传入玩家和电脑的选择值,playRound内部的参数会默认取undefined,undefined === undefined返回true,直接触发平局判定。 - 大小写与拼写不统一:
- 部分判断条件使用了小写的
"Paper"、"Rock",但ComputerSelection已通过.toUpperCase()转为大写,这些条件永远无法触发。 - 剪刀的拼写错误:
SCISSCORS应为SCISSORS,后续判断逻辑里也存在同样的拼写问题。
- 部分判断条件使用了小写的
- 多余的电脑选择调用:
game函数开头的console.log(getComputerChoice())会额外生成一次电脑选择,导致最终生效的是第二次调用的结果,第一次随机值被浪费。
修复后的完整代码
function getComputerChoice() { const randomnum = Math.floor(Math.random() * 3); // 改为0-2,逻辑更简洁 switch (randomnum) { case 0: return "ROCK"; case 1: return "PAPER"; case 2: return "SCISSORS"; // 修正拼写错误 } } function game() { const playerSelection = prompt("Rock, Paper, Scissors?").toUpperCase(); const computerSelection = getComputerChoice(); // 函数已返回大写,无需重复转换 function playRound(player, computer) { // 先处理平局情况 if (player === computer) { return "It's a Draw"; } // 用数组整理玩家获胜的所有条件,简化逻辑 const winCases = [ ["ROCK", "SCISSORS"], ["PAPER", "ROCK"], ["SCISSORS", "PAPER"] ]; for (const [p, c] of winCases) { if (player === p && computer === c) { return "You Won"; } } // 不符合获胜条件则直接判定失败 return "You Lose"; } // 传递正确参数并输出结果 const result = playRound(playerSelection, computerSelection); console.log(`玩家选择: ${playerSelection}, 电脑选择: ${computerSelection} —— ${result}`); } game();
关键修复点说明
- 传递有效参数:调用
playRound时传入playerSelection和computerSelection,确保函数能拿到实际选择值进行判断。 - 统一拼写与大小写:修正剪刀的拼写错误,所有判断逻辑使用统一的大写字符串,避免匹配失败。
- 简化胜负逻辑:用数组存储玩家获胜的组合,减少重复的
if判断,提升代码可读性和可维护性。 - 移除无效调用:删除
game函数开头多余的getComputerChoice()调用,保证电脑选择唯一有效。 - 规范命名:将
ComputerSelection改为小驼峰命名computerSelection,符合JavaScript编码规范。
内容的提问来源于stack exchange,提问作者Josh knon
相关产品推荐
相关产品推荐

