0

我对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.");

您可以看到,如果 dateage 不是数字,则会向用户发出警报。那时我希望再次出现提示,询问用户的年龄。我怎样才能做到这一点?

4

5 回答 5

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();

我使用 aconfirm进行重新检查,因为这意味着您可以更轻松地摆脱无限循环的情况。如果你不想污染命名空间,你可以把它写成一个命名的IIFE,如果你不想携带堆栈,你可以通过setTimeout调用。

于 2013-09-05T18:52:13.683 回答
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();
于 2013-09-05T18:52:01.780 回答
1

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

于 2013-09-05T18:52:28.813 回答
0

就个人而言,我喜欢让“可重启”功能看起来像:

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

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

于 2013-09-05T18:53:07.827 回答
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();

于 2016-01-27T10:09:20.030 回答