Javascript Can';t退出do while循环

Javascript Can';t退出do while循环,javascript,loops,infinite-loop,do-while,Javascript,Loops,Infinite Loop,Do While,我正在制作一个简单的石头、布、剪刀,我可以通过浏览器控制台玩。使用do/while循环,我会提示选择三个可接受的选项之一“石头”、“布”或“剪刀”。只要玩家输入这3个可接受选项中的一个,do/while循环就会终止。问题是它没有 function playerPlay(){ let choice; do{ choice = prompt("Rock, paper or scissors?").toLowerCase(); console

我正在制作一个简单的石头、布、剪刀,我可以通过浏览器控制台玩。使用do/while循环,我会提示选择三个可接受的选项之一“石头”、“布”或“剪刀”。只要玩家输入这3个可接受选项中的一个,do/while循环就会终止。问题是它没有

function playerPlay(){
    let choice;
    do{
      choice = prompt("Rock, paper or scissors?").toLowerCase();
      console.log(choice);
      console.log(choice !== "rock" || choice !== "paper" || choice !== "scissors");
      console.log(choice === "rock" || choice === "paper" || choice === "scissors");
    } while (choice !== "rock" || choice !== "paper" || choice !== "scissors");
    return choice; 
  }

  playerPlay();
我一直在尝试使用console.log进行调试,但发现播放器提示的选择似乎工作正常(请参见下面的屏幕截图),而且:

  • 当输入为“石头”、“纸”或“剪刀”时,两个console.log布尔测试记录为“true”。第一个console.log应该记录为false(意外),而第二个应该记录为true(预期)

  • 当输入为“notRockPaperScissors”时,第一个console.log布尔测试记录为true(预期),而第二个console.log布尔测试记录为false(预期)

  • 我当然忽略了显而易见的问题,但作为一个初学者,我不知道是什么导致了这种情况的发生,理解原因肯定会对我(以及其他可能的学习者)有所帮助。谢谢你的帮助

    while(choice!=“rock”| | choice!=“paper”| | choice!=“剪刀”)
    
    你的条件总是正确的,因为价值不是石头,不是纸,也不是石头,因为它不可能都是石头。用&&代替| |。

    while(选项!=“石头”| |选项!=“纸”| |选项!=“剪刀”)
    

    你的条件总是正确的,因为价值不是石头,不是纸,也不是石头,因为它不可能都是石头。请使用&&而不是| |。

    您应该使用
    &&
    运算符而不是
    |
    运算符

    i、 而不是这个

    while (choice !== "rock" || choice !== "paper" || choice !== "scissors");
    
    用这个

    while (choice !== "rock" && choice !== "paper" && choice !== "scissors");
    

    这样做的原因是,如果
    choice
    采用任何值[
    rock
    paper
    剪刀
    ],我们希望程序退出。在
    |
    运算符中,如果任何条件的计算结果为真,则循环将继续;在
    &&
    运算符中,如果任何条件的计算结果为假,则循环将退出。因此,如果choice取了列出的任何一个值,则条件将计算为false,然后整个条件将计算为false。

    您应该使用
    &&
    运算符,而不是
    |
    运算符

    i、 而不是这个

    while (choice !== "rock" || choice !== "paper" || choice !== "scissors");
    
    用这个

    while (choice !== "rock" && choice !== "paper" && choice !== "scissors");
    

    这样做的原因是,如果
    choice
    采用任何值[
    rock
    paper
    剪刀
    ],我们希望程序退出。在
    |
    运算符中,如果任何条件的计算结果为真,则循环将继续;在
    &&
    运算符中,如果任何条件的计算结果为假,则循环将退出。因此,如果choice接受列出的任何值,则条件将计算为false,然后整个条件将计算为false。

    问题在于while条件,您的程序将在while循环上堆叠,直到他获得false条件

    while (choice !== "rock" || choice !== "paper" || choice !== "scissors")
    
    使用| |(OR)逻辑运算符,您将在无限循环中进行堆栈。 您需要做的是更改为&(AND)运算符,如下所示:

    while (choice !== "rock" && choice !== "paper" && choice !== "scissors")
    

    问题是在while条件下,您的程序将堆栈在while循环上,直到他得到一个false条件

    while (choice !== "rock" || choice !== "paper" || choice !== "scissors")
    
    使用| |(OR)逻辑运算符,您将在无限循环中进行堆栈。 您需要做的是更改为&(AND)运算符,如下所示:

    while (choice !== "rock" && choice !== "paper" && choice !== "scissors")
    

    您无法提供满足退出条件的输入。如果
    选项
    “石头”
    ,那么它将不是
    “纸”
    “剪刀”
    ,因此
    通过。您想要
    &&
    取而代之-您想要在没有选择的情况下重复循环。或者
    while([“石头”、“布”、“剪刀”].indexOf(选择)<0)
    如果你想获得“花式”。使用更新的方法,例如
    ![“石头”、“布”、“剪刀”]。包括(选项)
    ,而不是
    。indexOf(选项)<0
    的可读性稍好。您无法提供满足退出条件的输入。如果
    选项
    “石头”
    ,那么它将不是
    “纸”
    “剪刀”
    ,因此
    通过。您想要
    &&
    取而代之-您想要在没有选择的情况下重复循环。或者
    while([“石头”、“布”、“剪刀”].indexOf(选择)<0)
    如果你想获得“花式”。使用更新的方法,例如
    ![“石头”、“布”、“剪刀”]。包括(选项)
    ,而不是
    。indexOf(选项)<0
    更便于阅读