【问题标题】:How do I "restart" if statement if a condition is met?如果满足条件,如何“重新启动” if 语句?
【发布时间】:2013-09-05 18:49:34
【问题描述】:

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

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 不是数字,则会向用户发出警报。那时我希望再次出现提示,询问用户的年龄。我该怎么做?

【问题讨论】:

  • 您需要使用一种或另一种形式的循环。一个简单的do..while 就足够了。

标签: javascript if-statement prompt


【解决方案1】:

把它放在一个函数中,这样你就可以重新调用

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。

【讨论】:

  • 时间不错的家伙,10 秒内 3 个相同的答案:D
  • 这看起来很简单。我想实际的实现是学习这些东西最难的部分。非常感谢。我对其进行了测试,它完全符合我的期望。
【解决方案2】:

你可以把它放在一个函数中,然后简单地调用这个函数:

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

【讨论】:

  • 当我这样做时它起作用了。非常感谢您和 Paul S. 的即时回复。
【解决方案3】:

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

【讨论】:

  • 我喜欢这种方法,但如果您可以在答案中添加一个示例,那就太好了。这是一个起点:jsfiddle.net/D5Kn6
【解决方案4】:

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

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

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

【讨论】:

  • 你也可以命名匿名函数。 (function restart(){ // code }());.
  • @RocketHazmat 如果有名称,则不再是匿名,而是命名函数表达式。我还要注意 MDN 说 Note: You should avoid using arguments.callee() and just give every function (expression) a name.Warning: The 5th edition of ECMAScript forbids use of arguments.callee() in strict mode.
  • 对于那些说他是 Javascript 新人的人来说,这不是一个好的答案。
【解决方案5】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2014-10-11
    相关资源
    最近更新 更多