Odin项目剪刀石头布函数异常:假条件下else if代码仍执行
问题分析与修复方案
你的代码核心问题是把赋值运算符=当成了相等比较运算符==/===,这直接导致条件判断完全失效:
- JavaScript里,
=是赋值操作,它会把右侧值赋给左侧变量,同时整个表达式的结果就是右侧的值(非空/非0值会被判定为true)。 - 而你需要的相等比较应该用
==(松散相等)或===(严格相等,推荐使用,避免类型转换引发的意外)。
具体错误位置:
- 第一行条件
if (round = 1):这里会把1赋值给round,导致这个条件永远为true,应该改为if (round === 1) - 所有分支的条件判断,比如
else if (player = "rock")、if (compchoice = "paper")等,全部是赋值操作,不管变量实际值是什么,这些条件都会被判定为true,直接进入对应分支。
修正后的代码:
function playaround(PlayerEntry){ let compchoice = getcomputerchoice(); let player = PlayerEntry.toLowerCase(); if (round === 1) {console.log("how about we do best of five?");} console.log("rock...\npaper...\nscissors..."); if (player === compchoice) {console.log ("A draw");} else if (player === "rock") { if (compchoice === "paper") {console.log ("Paper! I win!"); } else {console.log("Scissors! I lose...");} } else if(player === "paper") { if (compchoice === "scissors") {console.log("Scissors! I win!");} else {console.log("Rock! I lose...");} } else if (player === "scissors") { if (compchoice === "rock") {console.log("Rock! I win!");} else {console.log("Paper! I lose...");} } else {console.log("someone does not know how to play rock paper scissors...");} }
额外说明:
使用===严格相等可以避免JavaScript自动类型转换带来的意外问题,比如"1" == 1会返回true,但"1" === 1返回false,逻辑更清晰可靠。
内容的提问来源于stack exchange,提问作者JonJons
相关产品推荐
相关产品推荐

