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

confirmこれは、無限ループの状況からより簡単に脱出できることを意味するため、再チェックにa を使用しました。名前空間を汚染したくない場合は、これを名前付き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 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 に答える
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 に答える