新JavaScript入門  JavaScript,Neo-Generation  DOM  WSH  掲示板  表紙
9.日本語の扱い  11.デバッグ 
新JavaScript入門
10. フロー制御
以下述べるのは、Cと違うところのみです。 forwhileifelsecontinuebreakreturn はそのまま使えます。
なお、
switch文は JavaScript1.2 JScript3以降でサポートされています。
条件判定
ifwhilefor 等で使われる条件判定部に与えられるべき値は、 true または false です。 もっとも 0 なら false、 それ以外の数値なら true に自動的に変換されるので特に気にする必要はありません。 その他については型の変換を見てください。
    while(true) {       //0以外の数値でもよい
            ...
        if(condition) break;
            ...
    }
 
for...in
    for(variable in object) {
        ...
    }
 
object に含まれる全てのプロパティについて処理を行うことができます。
    var prop, obj;
    obj = document.anchors;
    for(prop in obj) {
        //"length"以外の時(配列の添字の時)に表示
        //いつの間にかこのifはいらなくなった
        if(prop != "length")
            alert(obj[prop].name);
    }
 
ボタンを押すと、このページの全てのアンカーの名前が順に表示されます。
このループは、 object のプロパティ名を表わす文字列を variable に順に格納しながら繰り返します。 上の例では "length" が prop に格納されます。 それとは別に配列オブジェクトでは特別に配列の添字も格納されます。
    var a = new Array(10);
    a[7] = 2;
    a[5] = 1;
    for(i in a)
        alert(i);
 
7、5 の順に表示されます。やっぱりハッシュ法を使っているのでしょうか (もうちょっと詳しくは、
こちら)。
with
with 文を使うと だらだらとした長いステートメントが短くなるかもしれません。
    with(form.text1) {
        value = value + "a";
    }
 
これは、
    form.text1.value = form.text1.value + "a";
 
と同じです。すなわち、
    with(object) {
        ...
    }
 
とすると、 object を省くことができます。
setTimeout
一定時間ごとに繰り返し処理を行いたいときは setTimeout を用います。
    var strhoe = "ほえほえほえほえほえほえほえ";
    var unitlength = "ほ".length;
    var hoelength = strhoe.length;
    
    function test4() {  setTimeout("scroll_hoe()", 300); }
    
    function scroll_hoe() {
        document.form1.text1.value = strhoe;
        //先頭の1文字を末尾に
        strhoe = strhoe.substring(unitlength, hoelength)
                + strhoe.substring(0, unitlength);
        setTimeout("scroll_hoe()", 300);
    }
 
一見すると再帰的に呼び出しているようですが、そうではありません。
    setTimeout(expression, millisec);
 
で、いったんサブルーチンの最後まで処理を行ない、 それから millisec ミリ秒待って、 expression を評価します。
    function test5() {
        //1が表示されてから2が表示される
        //すなわち下の行のほうが最初に実行される
        setTimeout("document.form2.text1.value = 2", 3000);
        document.form2.text1.value = 1;
    }
 
このように setTimeout を使うと無限に処理を繰り返すことができるわけですが、 これを止めるには clearTimeout を使います。
    var strhoe2 = "ほえほえほえほえほえほえほえ";
    var Timer_id;
    var isscrolling = false;        //最初は動いてない
    
    function test6() {
        if(isscrolling)             //動いているとき
            clearTimeout(Timer_id); //止める
        else                        //止まっているとき
            Timer_id = setTimeout("scroll_hoe2()", 300);
        isscrolling = !isscrolling;
    }
    
    function scroll_hoe2() {
        document.form3.text1.value = strhoe2;
        strhoe2 = strhoe2.substring(unitlength, hoelength)
                + strhoe2.substring(0, unitlength);
        Timer_id = setTimeout("scroll_hoe2()", 300);
    }
 
ボタンを押すと開始し、再びボタンを押すと止まります。
    clearTimeout(Timer_id);
 
setTimeout の返り値を引数にすることにより、
    Timer_id = setTimeout(expression, millisec);
 
expression の評価をキャンセルします。
expression にローカルな変数を使うことはできません(8/29/99)。
    function test7() {
        var a = "1";        //ローカル変数
        setTimeout("window.status = a", 2000);
    }
 
ボタンを押すと2秒後にエラーが発生します。
Written 11/9/97
Modified 4/27/03
first, prev, next, exit