for分に関して

for(var k=0; k<1; k++){}

上のようなfor分を作成したのですが、これをデバッグすると

k=1を通ってしまいます。どういうことか分かる方がいらっしゃいましたら、ご教授願います。

 

たいさん

「k++」 で k のインクリメントが行われた後に
「k<1」 の評価が行われ、「{}内の処理」を行うかどうかが判定されます。

よって、一時的に「k=1」 にはなっても「{}内の処理」の処理は行われないはずです。

for(var k=0; k<1; k++) {
console.log(k);
}

をお試しいただくと、「0」しか表示されないことがお分かりいただけるかと思います。

たいさん
cstapの瀧ヶ平です。

JavaScriptの仕様書及びMozilla Developer Networkを読むとわかるのですが、for文では各反復の最初に条件を確認し、各反復のおわりにインクリメント処理を行うため、かならずここではkが1になります(そうでないとfor文が終了しません)。

Shinichi Suenagaさん

コメント有難う御座います

 

確かにコンソール上では値が0になっていることを確認することが出来ました。

では、この場合はどのようにすれば、k=0の時点でループを抜けるように出来ますか?

瀧ヶ平さん

コメント有難う御座います

 

k=1になった時にループを抜けるような仕様にしたいのですが、

どのような仕様にすればよいでしょうか?

たいさん

k++;

の部分が実行される前にループを抜けたいということでしたら、

break;

を使うとよいと思います。

 

サンプル

for(var k = 0; k < 1; k++) {
// kがゼロなら強制的にループを抜ける
if(k === 0) break;
}

たいさん

k = 1のときにループを抜けるのであれば、while文を代わりに利用して、ループの末尾にk + 1 >= 1ならばbreak;するような処理にすればよいかと思います。

kの値を利用したいというだけならば、for文の外で別のカウンタ変数を定義しておき、for文の中でその変数にkの値を入れることで対応できると思います。