为何我的JavaScript石头剪刀布程序结果总是平局?求解决
问题分析与解决办法
嘿,我一眼就发现你代码里的问题啦!导致每次都显示平局的原因非常典型——你在判断平局的条件里用错了符号!
错误根源
你写的if (cs=ps)是赋值操作,不是比较操作。这个语句会把ps的值直接赋给cs,然后因为赋值操作的返回值就是被赋的值(只要不是undefined/null这类假值),所以这个条件永远为真,程序就只会走平局的分支,自然每次都是平局结果。
核心解决办法
把赋值符号=改成严格相等比较符===(或者宽松相等==,推荐用严格相等来避免隐式类型转换的坑),也就是把判断条件改成:
if (cs === ps) { html += "Its a tie!"; }
额外优化建议
另外可以加个小逻辑处理用户的无效输入,比如用户输入空值、或者不是Rock/Paper/Scissors的内容时,避免程序出错:
var player = prompt("Do you Choose Rock, Paper or Scissors?"); // 先判断输入是否有效 if (!player || !["Rock", "Paper", "Scissors"].includes(player.charAt(0).toUpperCase() + player.slice(1).toLowerCase())) { output.innerHTML = "请输入有效的选项:Rock、Paper或Scissors!"; } else { // 原来的游戏逻辑放在这里 }
修正后的完整代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>Complete Java Script Course</title> <meta name="description" content=""> <meta name="author" content="Yuan"> <meta name="viewport" content="width=device-width; initial-scale=1.0"> <link rel="shortcut icon" href="/favicon.ico"> <link rel="apple-touch-icon" href="/apple-touch-icon.png"> </head> <body> <div id="output">Complete Java Script Course</div> <script> var output = document.getElementById("output"); var player = prompt("Do you Choose Rock, Paper or Scissors?"); // 处理无效输入 if (!player || !["Rock", "Paper", "Scissors"].includes(player.charAt(0).toUpperCase() + player.slice(1).toLowerCase())) { output.innerHTML = "请输入有效的选项:Rock、Paper或Scissors!"; } else { var ps = player.charAt(0).toUpperCase(); var win = false; var computer = Math.random(); if(computer < 0.34){ computer ="Rock"; } else if (computer < 0.67){ computer ="Paper"; } else{ computer= "Scissors"; } var cs = computer.charAt(0).toUpperCase(); console.log(computer); var html=""; // 这里改成严格相等比较 if (cs === ps){ html+="Its a tie!"; } else{ if(ps=="R"){ if(cs=="S"){ win=true; } } else if(ps=="P"){ if(cs=="R"){ win=true; } } else{ if(cs=="P"){ win=true; } } if(win){ html += "Player Wins!"; } else{ html+= "Computer Wins!"; } } output.innerHTML = "Player Vs Computer<br>"+ player+" "+ "vs" +" "+computer+"<br>Result:"+" "+html; } </script> </body> </html>
内容的提问来源于stack exchange,提问作者SY Lim
相关产品推荐
相关产品推荐

