检查两个字符串的相等性在javascript中不能正常工作


function playerSelection() {
let choice = prompt("Enter you choice.");
while(choice != "rock" && choice != "paper" && choice != "scissor"){
alert("Wrong entry");
playerSelection();
}
return choice;
}        

在输入一个使while循环条件为真的字符串之前,这段代码工作得很好。一旦它在输入错误的字符串后进入while循环,并提示您输入另一个字符串,即使您输入了正确的字符串,它也会继续显示"错误的输入";警报并显示提示,直到重新加载页面。发生了什么事?

我尝试操作逻辑运算符,但似乎没有帮助。我猜它与递归有关,但我不知道它是什么。

您不需要再次调用该函数。提示方法已经完成了您(我猜)想要做的事情。这样做:

function playerSelection(){
let choice;
do{
choice = prompt("Enter your choice: ");
if(choice != "rock" && choice != "paper" && choice != "scissor"){
alert("Wrong entry!");
}
}while(choice != "rock" && choice != "paper" && choice != "scissor");
return choice;
}

应该在函数之前声明变量,如下所示:

let choice;
function playerSelection(){
choice = prompt("Enter your choice.");
while(choice != "rock" && choice != "paper" && choice != "scissor"){
alert("Wrong entry");
playerSelection();
}
return choice;
}
let result = playerSelection();
alert("result = " + result);

这是因为每次对playerSelection()的新调用都会创建一个新的调用上下文,该上下文存储自己的局部变量和参数。试一下:

playerSelection() {
let choice = prompt('Enter your choice:')
while (choice != 'rock' && choice != 'paper' && choice != 'scissors') {
alert('Wrong entry')
choice = prompt('Enter your choice:')
}
return choice
}

或者如果你想递归的话

playerSelection() {
let choice = prompt('Enter your choice:')
if (choice == 'rock' || choice == 'paper' || choice == 'scissors') {
return choice
} else {
alert('wrong entry')
return playerSelection()
}
}

最新更新