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

Odin项目剪刀石头布函数异常:假条件下else if代码仍执行

问题分析与修复方案

你的代码核心问题是把赋值运算符=当成了相等比较运算符==/===,这直接导致条件判断完全失效:

  • JavaScript里,=是赋值操作,它会把右侧值赋给左侧变量,同时整个表达式的结果就是右侧的值(非空/非0值会被判定为true)。
  • 而你需要的相等比较应该用==(松散相等)或===(严格相等,推荐使用,避免类型转换引发的意外)。

具体错误位置:

  1. 第一行条件if (round = 1):这里会把1赋值给round,导致这个条件永远为true,应该改为if (round === 1)
  2. 所有分支的条件判断,比如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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:46:04