无法摆脱我的while循环(Javascript)

quo*_*zil 2 javascript while-loop

作为代码学院课程之后的第一个项目,我正在制作摇滚/纸/剪刀游戏,但我无法看到我的循环在哪里出错.

while (userChoice !== "ROCK" | "PAPER" | "SCISSORS" | "LIZARD" | "SPOCK") {
    var userChoice = prompt("Invalid choice. Please pick ROCK, PAPER, SCISSORS, LIZARD or SPOCK.");
    var userChoice = userChoice.toUpperCase();
}
Run Code Online (Sandbox Code Playgroud)

道歉,如果它是平凡的.

dav*_*ave 6

userChoice !== "ROCK" | "PAPER" | "SCISSORS" | "LIZARD" | "SPOCK"
Run Code Online (Sandbox Code Playgroud)

应该

userChoice !== "ROCK" && userChoice !== "PAPER" && userChoice !== "SCISSORS" && userChoice !== "LIZARD" && userChoice !== "SPOCK"
Run Code Online (Sandbox Code Playgroud)

现在它基本上检查是否userChoice !== 0整个右侧是一个表达式并且计算结果为0.

在javascript中,|它本身就是一个按位或者.由于按位运算仅对整数有意义,因此您的字符串会转换为整数,因此您基本上执行0 | 0,将为0.

您可能正在考虑||,这是合乎逻辑的,或者我可以看到您将如何思考"如果userChoice不是Rock或Paper或Scissors",但是,再次,不是它如何工作.您必须检查userChoice是否不是Rock,而userChoice不是Scissors.

||如果你想看看userChoice是否是Rock,或者如果userChoics是剪刀等,你会使用.

根据评论,您可以通过执行以下操作来显着提高代码可读性:

var choices = ["ROCK", "PAPER", "SCISSORS", "LIZARD", "SPOCK"];    
while(choices.indexOf(userChoice) == -1) {
     userChoice = prompt("Invalid choice. Please pick one of: " + 
                         choices.join(" ").toUpperCase());
}
Run Code Online (Sandbox Code Playgroud)

此外,只是添加我个人最喜欢的JavaScript技巧,你可以改变

while(choices.indexOf(userChoice) == -1)
Run Code Online (Sandbox Code Playgroud)

while(!~choices.indexOf(userChoice))
Run Code Online (Sandbox Code Playgroud)