如果条件满足,如何“重启”if语句?

时间:2013-09-05 18:49:35

标签: javascript if-statement prompt

我对javascript很新。我想制作一个快速的程序,使用我父亲教给我的公式,根据他们的年龄生成最小的年龄。在我的代码中我有一个条件,如果我的var(dateage)不是数字,则要求用户输入一个数字。我希望程序然后重新询问变量赋值提示,直到给出一个数字。

var dateage = prompt("How old are you?");

if(dateage >= 14){
    dateage = dateage/2 + 7;
    alert("The youngest you can date is " + dateage)
} else if(isNaN(dateage)){
   alert("Please enter in a number");
} else
   alert("You're too young to date.");

您可以看到,如果日期不是数字,则会提醒用户。此时,我希望再次出现提示,询问用户的年龄。我怎么能这样做?

5 个答案:

答案 0 :(得分:2)

将它放在函数中,以便重新调用

function checkAge() {
    var dateage = prompt("How old are you?");

    if(dateage >= 14){
        dateage = dateage/2 + 7;
        alert("The youngest you can date is " + dateage)
    } else if(isNaN(dateage)){
       if (confirm("Please enter in a number")) checkAge();
    } else
       alert("You're too young to date.");
}
checkAge();

我使用confirm进行重新检查,因为这意味着您可以更轻松地摆脱无限循环的情况。如果您不想污染命名空间,可以将其写为命名 IIFE ,如果您不想进行堆栈,则可以通过 setTimeout <调用< / em>的

答案 1 :(得分:1)

你可以将它放在一个函数中,只需继续调用函数:

function askAge(){
   var dateage = prompt("How old are you?");

   if(dateage >= 14){
      dateage = dateage/2 + 7;
      alert("The youngest you can date is " + dateage)
   } else if(isNaN(dateage)){
      alert("Please enter in a number");
      askAge();
   } else
      alert("You're too young to date.");
}

askAge();

答案 2 :(得分:1)

将问题和输出包装在while循环中,仅在输入数字时断开

答案 3 :(得分:0)

就个人而言,我喜欢“可重启”功能如下:

(function() {
    var restart = arguments.callee; // "magic" property refers to current function
    if( somecondition) setTimeout(restart,1);
    else {
        // do actual stuff
    }
})();

setTimeout释放了当前的调用堆栈,否则如果您设法无限循环restart,则可能会出现堆栈溢出错误。

答案 4 :(得分:0)

function checkAge() {
    var dateage = prompt("How old are you?");

    if(dateage >= 14){
        dateage = dateage/2 + 7;
        alert("The youngest you can date is " + dateage)
    } else if(isNaN(dateage)){
       if (confirm("Please enter in a number")) checkAge();
    } else
       alert("You're too young to date.");
}
checkAge();