关于 JavaScript 的问题:我如何 "reset" 切换语句?

Q about JavaScript: how can i "reset" switch statement?

switch 语句有不同的情况,但默认情况下,系统会提示用户输入新值。

我希望针对不同的情况检查新值。如果大小写匹配,则执行相应的代码。但否则,它将进入默认状态并重新提示。

如何编写代码来重新检查 switch 语句中的表达式?

var anyLetter; 
anyLetter = prompt("Enter one of the following letters (b, o, or h): "); 

switch(anyLetter)
{
case "b": 
case "B": 
    //code if user enters b or B
    break; 
case "o": 
case "O": 
    //code 
    break; 
case "h": 
case "H": 
    //code
    break; 
default: 
    var anyLetterAgain; 
    anyLetterAgain = prompt("Enter one of the following letters (b, o, or h): "); 
}

我希望通过 switch 语句将用户为 anyLetterAgain 输入的内容 运行 继续,直到输入 b、o 或 h。请帮忙!谢谢

对于default.

的情况,只需再次调用您的开关块代码所在的函数即可

例如:

function askForLetter() {
    var anyLetter; 
    anyLetter = prompt("Enter one of the following letters (b, o, or h): "); 

    switch(anyLetter){
        case "b": 
        case "B": 
            //code if user enters b or B
        break; 
        case "o": 
        case "O": 
            //code 
        break; 
        case "h": 
        case "H": 
            //code
        break; 
        default:
            askForLetter();  
    }
}

也许使用while循环更合适。例如:

var good = false
while (!good) {
  var l = prompt("Enter one of the following letters (b, o, or h): ");
  if (l == 'o' || l == 'O' || l == 'b' || l == 'B' || l == 'h' || l == 'H') {
    good = true;
    MyOtherFunction(l); //handle the user input here
  } 
}

只是一个想法...

虽然上面的所有答案都是正确的,但我需要指出的是,当您需要包含新选项时,需要对条件进行额外修改,其次,在这种很容易修复的状态下,很难检索到字母本身,但是由于它的递归性质,它可能会在某些极端情况下导致堆栈溢出(注意讽刺意味)。 这是我的代码版本:

var anyLetter = ''; 
while (anyLetter == '')
{
    anyLetter = getMyLetter();
}
console.log("MyLetter:", anyLetter);

function getMyLetter()
{
    var letter = prompt("Enter one of the following letters (b, o, or h): "); 
    switch(letter)
    {
        case "b": 
        case "B": 
        {
            //code if user enters b or B
            break; 
        }
        case "o": 
        case "O": 
        {
            //code 
            break; 
        }
        case "h": 
        case "H": 
        {
            //code
            break; 
        }

        default: 
        {
            letter = '';
        }

    }
    return letter;
}