While循环退出而不是返回到循环-Javascript

While循环退出而不是返回到循环-Javascript,javascript,loops,while-loop,Javascript,Loops,While Loop,试图只得到一个数字答案。内部while循环退出,而不是返回到循环中。我不知道为什么 var numPlays = prompt("How many games do you want to play?"); if (isNaN(numPlays) == true) { while (isNaN(numPlays) == true) { numPlays = prompt("That's not a number. Please pick a number.");

试图只得到一个数字答案。内部while循环退出,而不是返回到循环中。我不知道为什么

var numPlays = prompt("How many games do you want to play?");
if (isNaN(numPlays) == true) {
    while (isNaN(numPlays) == true) {
        numPlays = prompt("That's not a number. Please pick a number.");
    }
} else if (numPlays == 0) {
    while (numPlays == 0) {
        numPlays = prompt("You have to at least play one game. Please pick a number.");
    }
} else if (numPlays == 1) {
    alert("OK! Let's play " + numPlays + " game!");
} else {
    alert("OK! Let's play best of " + numPlays + "!");
}

空输入将计算为false(“确定”在while循环中)

尝试使用parseInt(),该函数返回NaN对于空字符串和非数字,请使用以下方法测试您自己的一些示例:

isNaN(parseInt(prompt("enter number")))

由于if/elseif结构;他们中只有一个能匹配。第一次运行时,它会在第1行询问数字,然后决定要通过if/elseif/else结构的哪个分支。您是否更改
numPlays
的值并不重要,稍后,已经做出了决定

这里可能需要一个递归调用

function getNumPlays(message) {
    if (!message) { message = "How many games do you want to play?"; }
    var numPlays = parseInt(prompt(message), 10);
    if (isNaN(numPlays)) {
        return getNumPlays("That's not a number.");
    } else if (numPlays < 1) {
        return getNumPlays("You have to at least play one game.");
    }
    return numPlays;
}
var numChosen = getNumPlays();
if (numPlays === 1) {
    alert("OK! Lets play " + numChosen + " game!");
} else {
    alert("OK! Let's play best of " + numChosen + "!");
}
函数getNumPlays(消息){ 如果(!message){message=“你想玩多少游戏?”;} var numPlays=parseInt(提示(消息),10); 如果(isNaN(numPlays)){ returngetnumplays(“那不是一个数字”); }否则如果(numPlays<1){ return getNumPlays(“您必须至少玩一个游戏。”); } 返程天数; } var numChosen=getNumPlays(); 如果(numPlays==1){ 警报(“好!让我们玩”+numChosen+“游戏!”); }否则{ 警惕(“好吧!让我们玩好”+numChosen+“!”); } 注意这里的
parseInt(…,10)
。这将转换为数字或
NaN
。"十"重要,;它指定数字的基数。八进制数字写为“011”,有时javascript引擎不知道您想要的是八进制还是十进制

var numPlays = prompt("How many games do you want to play?");


while (isNaN(numPlays) == true || numPlays == 0) {

        if(isNaN(numPlays) == true)
            numPlays = prompt("That's not a number. Please pick a number.");
        else    
            numPlays = prompt("You have to at least play one game. Please pick a number.");
   }

if (numPlays == 1) 
    alert("OK! Let's play " + numPlays + " game!");
else 
    alert("OK! Let's play best of " + numPlays + "!");

我们必须有所有的嵌套循环。。。这是要求吗?我们能简化它吗?

没有必要进入循环

一个简单的例子

// Wrap in a function so we can start over
function start() {
  var numPlays = prompt("How many games do you want to play?");
  // edited this to check for 0
  if (isNaN(numPlays) || numPlays == 0) {
    alert('Nope, bad answer, try again!');
    return start();
  } else if (numPlays == 1) {
    alert('Ok, lets play 1 game!');
  } else {
    alert('Ok, lets play the best of ' + numPlays + 'games!');
    // A little aside
    // var neededToWin = (Math.floor((numPlays / 2)) + 1);
    // alert('Ok, you need to win ' + neededToWin + ' out of ' + numPlays + ' games to beat me!');
  }
}
从技术上讲,你会希望在“一半比赛+1”中取得最佳成绩。
所以要赢,你需要赢7/12场比赛。你只需除以

就可以发现,你有两个
while
循环。每一个都只检查特定类型的错误。如果有人键入
0
,则跳过第一个。第二个将报告该错误并请求另一个号码。如果然后键入“XYZ”,第二个while循环将退出,因为“XYZ”不等于零。如果while循环为false,如何返回外部If/else语句?例如,如果我首先键入0,然后键入2,如何让计算机发出警报“OK!让我们充分发挥”+numPlays+“!”
isNaN
检查该值是否为
NaN
(这是一个特殊的IEEE754值)。它不是用来检查它是否是一个数字。当你的函数满意它是正确的时,它可能会返回该值。由OP来选择下一步要做什么。