Can';t退出我的while循环(Javascript)

Can';t退出我的while循环(Javascript),javascript,while-loop,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 = us

作为完成代码学院课程后的第一个项目,我正在制作一个石头/布/剪刀游戏,但我看不出我的循环哪里出了问题

while (userChoice !== "ROCK" | "PAPER" | "SCISSORS" | "LIZARD" | "SPOCK") {
    var userChoice = prompt("Invalid choice. Please pick ROCK, PAPER, SCISSORS, LIZARD or SPOCK.");
    var userChoice = userChoice.toUpperCase();
}
道歉,如果它是平凡的

userChoice !== "ROCK" | "PAPER" | "SCISSORS" | "LIZARD" | "SPOCK"
应该是

userChoice !== "ROCK" && userChoice !== "PAPER" && userChoice !== "SCISSORS" && userChoice !== "LIZARD" && userChoice !== "SPOCK"
现在它基本上是在检查
userChoice!==0
作为一个表达式的整个右侧,计算结果为0

在javascript中,
|
本身就是一个按位or。由于按位运算只对整数有意义,字符串被转换为整数,所以基本上是0 | 0,也就是0

你可能想的是
|
,这是一个逻辑or,我可以看到你会怎么想“如果用户选择不是石头、布或剪刀”,但再一次,不是它是如何工作的。您必须检查userChoice是否为Rock,userChoice是否为剪刀

如果你想知道userChoice是石头,或者userChoics是剪刀,等等,你可以使用
|

根据注释,您可以通过执行以下操作大大提高代码的可读性:

var choices = ["ROCK", "PAPER", "SCISSORS", "LIZARD", "SPOCK"];    
while(choices.indexOf(userChoice) == -1) {
     userChoice = prompt("Invalid choice. Please pick one of: " + 
                         choices.join(" ").toUpperCase());
}
另外,只需添加我个人最喜欢的javascript技巧,您可以更改

while(choices.indexOf(userChoice) == -1)


或者,如果要使用类似“不在”的内容,可以创建如下对象:

var choice = {ROCK:{}, PAPER:{}, SCISSORS:{}, LIZARD:{}, SPOCK:{}};
然后将while语句修改为:

while (!(userChoice in choice))

您尝试了“break”语句?如果我错了,请纠正我,但这不是执行多个条件语句的方式,您必须显式地说
userChoice!=“摇滚乐”&&userChoice!=“剪刀”
等…他们是否应该从while循环中的
var userChoice
中删除
var
?您可以使用switch语句,而不是所有与&&&的链接比较。或者你可以这样做:
while([“石头”、“布”、“剪刀”、“蜥蜴”、“斯波克”].indexOf(userChoice)<0)
@DanKorn-或者我最喜欢的:
如果(![“石头”、“布”、“剪刀”、“蜥蜴”、“斯波克”].indexOf(userChoice))
稍微偏离主题,但为了干燥和可读性,我会这样做:
var choices=[“石头”、“布”、“剪刀”,“LIZARD”、“SPOCK”];while(choices.indexOf(userChoice)=-1)
EDIT:heh,我们都有相同的挑剔。如果你想遵循DRY(不要重复你自己),你可以这样做:
var choices=[“石头”、“布”、“剪刀”、“蜥蜴”、“SPOCK”];while(choices.indexOf(userChoice)=-1)userChoice=prompt(“无效选择。请选择:“+选项)
while (!(userChoice in choice))