JavaScript制御プログラムフロー

8307 ワード

通常javascriptの文は書き込み順に一つ一つ実行されます.これを順番実行といいます.これはjavascriptのデフォルトの流れ方向です.
順序実行の代替方法は、プログラムをスクリプトの他の部分にストリーミングすることである.つまり、次の文を順番に実行するのではなく、別の文を実行します.
スクリプトを有効にするには、この制御転送を論理的に実行しなければなりません.プログラム制御の移行は判定に基づいて行われ、判定の結果は真実文である(ブール値を返す). true または false式を作成して、結果がtrueかどうかをテストします.この目的は2つの主要なプログラム構造によって達成できます.
第一は構造を選択することです.この構造は、プログラム内で交差点(道路の分岐と同様)を作成することにより、プログラムフローの可能な方向を指定することができる.JavaScriptには四つの選択構造があります.
  • 単一構造(if)
  • デュアル構造(if/else)
  • 内の三元演算子?
  • 多選択構造switch
  •  第二のプログラム制御構造は重複構造である.この構造は、条件を満たすときに繰り返す動作を指定します.制御文の条件が満たされている場合(通常、特定回数の反復後)は、重複構造以外の次のステートメントに移るように制御する.JavaScriptには4つの重複構造があります.
  • サイクルトップで式をテストします.
  • 循環底部におけるテスト式(do/while)
  • 操作対象の各属性(for-i)
  • カウンタによって制御される重複(for)
  • コントロール構造と重複制御構造をネストとスタックで選択することで、かなり複雑なスクリプトを作成することができます.
    条件判定式を使う
    JavaScriptサポート if 和 if…else 条件文はい、 if ステートメントでテスト条件を満たしている場合、関連するJavaScriptコードを実行します.はい、 if…else ステートメントでは、この条件が試験に合格していない場合、他のコードが実行されます.最も簡単な if 文の形式は一行に書くことができますが、通常は複数行を使います. if 和 if…else 語句
    以下の例を説明した. if 和 if…else ステートメントで使用できる文法.最初の例は最も単純なブールテストを示します.括弧内の項目の計算結果が(または強制的に)trueである場合 実行する if 後の文またはブロック.
    function GetReaction(newShip, color, texture, dayOfWeek)
    {
       // The test succeeds if the newShip Boolean value is true.
       if (newShip)
       {
          return "Champagne Bottle";
       }
    
       // The test succeeds if both conditions are true.
       if (color == "deep yellow" && texture == "large and small wrinkles")
       {
          return "Is it a crenshaw melon?";
       }
    
       // The test succeeds if either condition is true.
       if ((dayOfWeek == "Saturday") || (dayOfWeek == "Sunday"))
       {
          return "I'm off to the beach!";
       }
       else
       {
          return "I'm going to work.";
       }
    }
    
    var reaction = GetReaction(false, "deep yellow", "smooth", "Sunday");
    document.write(reaction);
    
    // Output: I'm off to the beach!
    条件演算子:
    JavaScriptはまた、暗黙の条件形式をサポートします.テストする条件の後に疑問符を使います. if)また、二つの代替項目を指定します.一つは条件を満たす時に使います.一つは条件を満たさない時に使います.これらの代替項目はコロンで区切られなければなりません.
     
    var AMorPM = (theHour >= 12) ? "PM" : "AM";
     例えば、AND表現が((x=123)&&(y==6)である場合、JavaScriptはxが123かどうかを先にチェックします.もしそうでないと、表現全体はtrueではなく、yが6に等しいとしても同じです.したがって、yは絶対にテストしません.そして、JavaScriptは値を返します. false同様に、複数の条件のうちの一つだけである場合は、 true(??演算子を使う)では、いずれの条件でも試験に合格すると、テストは停止します.テストする条件が関数呼び出しやその他の複雑な表現を実行する場合に有効です.このように考えて、Or表現を作成する時に、一番先に置くべきです. true の条件です.And表現を作成するには、まず最初に false の条件です
    このような方式でスクリプトを設計するメリットは、 ルンファースト() は0を返します.以下の例では実行されません. runsecond()
    ループを使う
    ステートメントまたはステートメントブロックを繰り返し実行するために、様々な方法で使用できます.一般的に、繰り返し実行はサイクルまたは反復と呼ばれる.反復はサイクルの単一実行である.通常、変数テストによって制御されますが、ループを実行するたびに値が変わります.JavaScriptは4種類のサイクルをサポートします.for サイクル、for…in サイクル サイクル、ド…while ループ
    ループに使う
    for文はカウンタ変数を指定します.一つのテスト条件と新しいカウンタとの操作です.繰り返しの前に条件をテストします.テストが成功すると、ループ内のコードが実行されます.テストに失敗したら、ループ内のコードを実行しないで、プログラムはループの後の最初の行に近いコードを実行し続けます.サイクル実行後と次の反復開始前にカウンタ変数を更新します.ループ条件が常に満たされていない場合は、ループは実行されません.常にテスト条件を満たすと無限ループが発生します.場合によっては、前のようなことが期待されるかもしれませんが、後のようなことはほとんど望みませんので、循環条件を作成する時は注意が必要です.
    // The update expression ("icount++" in the following examples)
    // is executed at the end of the loop, after the block of
    // statements that forms the body of the loop is executed, and
    // before the condition is tested.
    
    // Set a limit of 10 on the loop.
    var howFar = 10;
    
    // Create an array called sum with 10 members, 0 through 9.
    var sum = new Array(howFar);
    sum[0] = 0;
    
    // Iterate from 0 through 9.
    var theSum = 0;
    for(var icount = 0; icount < howFar; icount++)
    {
       theSum += icount;
       sum[icount] = theSum;
    }
    
    // This code is not executed at all, because icount is not greater than howFar.
    var newSum = 0;
    for(var icount = 0; icount > howFar; icount++)
    {
       newSum += icount;
    }
    
    // This is an infinite loop.
    var sum = 0;
    for(var icount = 0; icount >= 0; icount++)
    {
       sum += icount;
    }
     
    for-i nサイクルを使う
    単一ステップ実行(反復)オブジェクトのエニュメレーションに使用するすべての属性または配列のすべての要素.for-i-nサイクル中のサイクルカウンタは文字列でもいいし、数字(一般的には文字列)でもいいです.
    // Create an object with some properties
    var myObject = new Object();
    myObject.name = "James";
    myObject.age = "22";
    myObject.phone = "555 1234";
    
    // Enumerate (loop through)_all the properties in the object
    for (var prop in myObject)
    {
        // This displays "The property 'name' is James", etc.
        document.write("The property '" + prop + "' is " + myObject[prop]);
        // New line.
        document.write("<br />");  
    }
     
    whileループを使う
     
     
    while ループは for ループ.違いは、while ループにはカウンタ変数が内蔵されていません.または式を更新します.ステートメントまたはステートメントブロックの繰り返しを制御するには、より複雑な規則が必要です.このコードのn回だけ実行しないでください. while ループ.以下の例は、Internet Explorerオブジェクトモデルと while ループして簡単な問題をユーザーに問い合わせる.
     
    var x = 0;
    while ((x != 5) && (x != null))
    {
        x = window.prompt("What is my favorite number?", x);
    }
    
    if (x == null)
        window.alert("You gave up!");
    else
        window.alert("Correct answer!");
     注意:なぜならば while ループには明示的なカウンタ変数が内蔵されていませんので、このサイクルは他のタイプのサイクルよりも無限ループが発生しやすいです.なお、循環条件はいつまたはどこで更新されているかが分かりにくいため、不注意で編集されています. while ループは条件を更新しないかもしれません.したがって、デザイン while 循環する時は十分に慎重にしなければならない.do while()とwhile()は類似していますが、dowhile()は少なくとも一回コードブロックを実行します.
    breakとcontinueのキーワードを使って、違い:breakを使って強制的に循環体から飛び出すことができて、循環の後に続くコードを実行して、continueは今回の循環を退出するので、依然としてトップから引き続きこの循環体を実行します.
    var x = 0;
    do
    {
        x = window.prompt("What is my favorite number?", x);
    
        // Did the user cancel? If so, break out of the loop
        if (x == null)
            break;
    
        // Did they enter a number?
        // If so, no need to ask them to enter a number.
        if (Number(x) == x)
            continue;
    
        // Ask user to only enter in numbers
        window.alert("Please only enter in numbers!");
    
    } while (x != 5)
    
    if (x != 5)
        window.alert("You gave up!");
    else
        window.alert("Correct answer!");