プロが教えるわが家の防犯対策術!

初歩的な事ですが教えて下さい。
for文で宣言した変数をfor文内で変更した時、
通常の記述で上手く動作しません。
どのようにしたら良いのでしょうか?

意味をなさないfor文ですが…
for (var i=0; i<5;i++){
alert("i=" + i);
i=4;//ここが上手くいかない
}

以下のようにすると意図した通りになります。
が、なんかかっこ悪い?違う気がする…
for (var i=0; i<5;){
alert("i=" + i);
i=4;//これだと上手くいく
i++;
}

上記以外のメジャーな方法って有るのでしょうか?
それともこれが最善でしょうか?教えて下さい。

A 回答 (3件)

あまりfor文の中でfor文で定義した変数を変更することは聞かないですが・・・。



私ならwhile文を使いますね。
こんな感じです。

var i = 0;
while (i < 5) {
i = 4;
alert("i=" + i);
i++;
}

もちろん、i++の位置を変えると挙動も変わってくるので注意が必要ですが・・・。
    • good
    • 0
この回答へのお礼

ありがとうございます。
while文を使うのも良いかなとは思っていたのですが、
入れ子にした時、少しわかりにくくなるような
気がしてまして…

var i=0;
while (i<5){
var j=0;
while (j<7){
alert ("i=" + i + " j=" + j);
if (j = 4){ i=4; }
j++;
}
i++;
}

みたいなのはfor文の方がスマートかなぁ
ひょっとして俺が知らないだけなのか!?
と不安に思って質問した次第です。

こういう際は少し回りくどく見えてもwhile文使う方が当たり前
と考えて良いのでしょうか。

お礼日時:2009/05/27 20:57

IE7,Firefox3で試してみました。



for (var i=0; i<5;i++){
alert("start: i=" + i);
i=4; //ここが上手くいかない
alert("end: i=" + i);
}
alert("end: i=" + i); で i=4 が確認され、次のインクリメントで条件を満たさなくなるためループを終了する。
問題ないように思いますが、どのような動作を期待しているのでしょうか…?
    • good
    • 0
この回答へのお礼

adobeのソフトはJavaSciptで動作を操作できる機能がありまして、
そのソフト内で実行されるJavaScriptでは
for文で宣言された変数の数値をfor文内でうまく変更できないようです。

for (var i=0; i<5;i++){
for (var j=0; j<7;j++){
alert("i=" + i + " j=" +j );
if(i=2){i=4;}
}
}
をブラウザ上のJavaScriptで実行した場合期待どうり動いてしまいました。

どうやら、adobeソフトを操作する時のJavaScriptのみでおこる挙動のようです。
今回質問した事でその事を知る事ができました。

混乱させてしまってすいません。
出来たハズの事が上手く動かない為、私自身も混乱してしまいました。
ブラウザ上のJavaScritでも挙動を調べてみるべきだったかもしれません。

think49さんx_jouet_xさん
どうもありがとうございました。

お礼日時:2009/05/28 08:21

ちょっと私もどのような処理を期待されているのかイメージがつきません・・・。

すみません。

場合によってはfor文やwhile文以外の制御文の方がベターかも知れませんし・・・。
    • good
    • 0
この回答へのお礼

adobeのソフトはJavaSciptで動作を操作できる機能がありまして、
そのソフト内で実行されるJavaScriptでは
for文で宣言された変数の数値をfor文内でうまく変更できないようです。

for (var i=0; i<5;i++){
for (var j=0; j<7;j++){
alert("i=" + i + " j=" +j );
if(i=2){i=4;}
}
}
をブラウザ上のJavaScriptで実行した場合期待どうり動いてしまいました。

どうやら、adobeソフトを操作する時のJavaScriptのみでおこる挙動のようです。
今回質問した事でその事を知る事ができました。

混乱させてしまってすいません。
出来たハズの事が上手く動かない為、私自身も混乱してしまいました。
ブラウザ上のJavaScritでも挙動を調べてみるべきだったかもしれません。

think49さんx_jouet_xさん
どうもありがとうございました。

お礼日時:2009/05/28 08:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!