🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

5回答

369閲覧

for以下の実行結果がピンときません

hisayan

総合スコア60

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2019/09/30 22:19

javascript

1for(let count = 10;count=0;count--){ 2console.log(count); 3} 4 5```この記述の実行結果が 610 9 8 7 6 5 4 3 2 1  7になるような気がするのですが、実行しても全く反応がありません。 8なぜ反応しないのかがピンときません。 9間違っているからなのですが、この間違いが分かりません。 10count=0をcount>=0にすればうまくいくのですが、count=0自体が間違いであると考えればよいのでしょうか。 11 12<うまくいった場合の例> 13for(let count = 10;count>=0;count--){ 14console.log(count); 15}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takasima20

2019/09/30 22:47

終了条件が count=0 はたぶん count==0 のつもりなのかな。
nullpot

2019/09/30 23:00

直接質問者さんへの回答でなくて申し訳ないのですが、質問者さんも勘違いなさっているポイントなのでこちらに書きます。同時にtakasima20さんも勘違いなさっているようなのですが、「終了条件」ではなく、ここの「条件が満たされるとき(=true)」にループ内に行く条件なのです
m.ts10806

2019/09/30 23:58 編集

書いた通りにしか動きませんよ。 「思った通り」には動きません。 って前に何度か指摘しているので(「気がする」ではないです)、見直してください。 思いや気持ちで動くものではありません。
querykuma

2019/10/01 05:26 編集

代入式count=0と比較式count===0の違いはわかりますか?
guest

回答5

0

count=0代入式です。この式を判定した瞬間に、countには0が代入され、そして0はfalsyなのでループを外れます。

逆にここをcount=1のようにした場合、ループ変数をどう変更しようがここで1に書き戻されてしまうので、無限ループとなります。

投稿2019/09/30 23:13

maisumakun

総合スコア145975

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2019/10/01 08:40

横槍失礼します。 forのその箇所に、代入式を入れると、 代入された変数自体の値から論理値判定する、という解釈でよろしいでしょうか? 今更ながらかなり勉強になりましたので、思わず質問でした。
miyabi_takatsuk

2019/10/01 08:56

なるほど! 大変にありがとうございます!! また、基礎からも欠かさず勉強していこうと思いました。
guest

0

count=0のような式は「条件式」と呼ばれ「繰り返しを続ける条件」となります。

「もしcount=0だったら繰り返しを続ける」
というのはおかしいですよね?
「もしcount>=0だったら繰り返しを続ける」というのはどうでしょうか。
しっくり(?)くるのでは...

参考
MDN

投稿2019/09/30 22:29

編集2019/09/30 22:31
kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

for(let count = 10;count=0;count--){
console.log(count);
}

初期値countが10、countが0の場合は-1をやり続けなさい。
初期値のcountが10で、countが0という条件に当てはまらないので何もしない。

皆様ありがとうございました。ご指摘のことを色々試してForの知識が深まりました。

投稿2019/10/02 22:16

hisayan

総合スコア60

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2019/10/03 04:24

解釈がまだ微妙に違います。 maisumakunさん達の回答をもっとよく読んで、噛み砕いていきましょう。 ポイントは、forのその箇所はあくまで値の評価(true or falseか、それに互換する値を評価)をしているだけなのと、 count = 0は条件ではない、ということを理解して下さい。
makosankibu

2019/10/07 06:01

もう解決したとのことですが、これを見た人が間違わないように... 誤りのある文 => 誤:初期値のcountが10で、countが0という条件に当てはまらないので何もしない。 →正:初期値のcountが10で、条件式がcount=0という代入式の為、戻り値が0になる。(代入式は代入した値が戻り値になる。) 0は真偽値の解釈ではfalseの為、条件式がfalseになる。
guest

0

teratailの他の質問でfor文の制御フローを解説するために作成した図です。

for文の説明

count=0count>=0は違うものです。
count=0は変数への値の代入という式です。変数countに値0を代入しています。結果の値は常に0です。
count>=0は比較して結果の値を得る式です。比較演算子>=count0の大きさを比較してtrue(yes)false(no)を返しています。

for文の終了条件のところは代入ではなく条件式を入れてください。

count==0count===0は変数countが値0と等しいか比較してtrue(yes)false(no)を返す式です。

投稿2019/10/01 05:09

編集2019/10/01 08:27
querykuma

総合スコア777

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2019/10/01 05:10

JavaScriptでは代入も式です(式の書けるところには代入も書けます)。「a = b = 0;」のように書いた場合、「b=0」の結果として得られる0をaに代入している、ということになります。
maisumakun

2019/10/01 05:13

そして、任意の式にセミコロンをつければそれは文になります。「a=0;」も「console.log('foo');」も、実質的な意味はないですが「a>=0;」も「5;」も、すべて式にセミコロンを付けた文として文法的に成立します。
querykuma

2019/10/01 05:24

代入を文と書いたところ低評価を2つ付けられましたので式に直しました。
q_sane_q

2019/10/01 05:35

私は+も-評価つけていませんが、ピンクのところは「終了条件」ではなく語感を揃えて表現するなら「継続条件」ですかね フローチャートも終了条件がNなら終了、になってしまっていますし
querykuma

2019/10/01 05:54 編集

作成したときベストな表現が見つかりませんでした。 ループの終了条件をみていますがYのとき終了するとしていません。 フローチャートも終了条件式の結果がNならループを終了としています。
querykuma

2019/10/01 08:27

代入文を直したら低評価が-1に戻っていました。 3つ低評価がついていますがなぜでしょう? 無言で付けないでください。 nullpotさんの回答やMDNにありますように条件(condition)としました。 ループ本体を1回も実行しない(継続しない)ときがあると思いました。
miyabi_takatsuk

2019/10/04 17:24 編集

おそらく、緑の増減というのが間違っているのかと・・・。 一つ目の式が変数の初期化、二つめの部分が条件(式なりなんなりの値の評価)という部分はなんとなく意味あいも合っていますが、 三つ目の緑の増減は、増減ではなく、 二つ目の式(というか値)が真となった場合、三つ目の式を実行した上でブロック内の処理を実行する、という仕様のようです。 よって、三つ目には、増減以外の式を入れることも可能です。 for (let i = 0; i < 10; i = 1) { // 無限ループ } のようにです。 増減や条件というよりは、 forの()内のものは、 一つ目が最初の一回、 二つ目は繰り返しの度その後の三つ目とブロック内を実行するかを値によって評価、 三つ目は、二つ目が真の場合に実行する ということなのでしょう。
guest

0

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for

JavaScript

1for ([initialization]; [condition]; [final-expression]) statement

condition

ループの各反復の前に評価される式。もしこの式が true に評価されるなら、statement が実行されます。この条件テストは省略可能です。もし省略されたなら、条件は常に true に評価されます。もしこの式が false に評価されるなら、実行は for の構成子に続く最初の式に飛びます。

というわけで、
count=0の場合、countは0ではないので、ループ終了となります。
count>=0でうまく行ったのは、最初のループでcountは0以上だったためで、ループが回るうちに0を下回って、ループが終了します。

投稿2019/09/30 22:28

nullpot

総合スコア153

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2019/10/01 00:32 編集

> count=0の場合、countは0ではないので、ループ終了 残念ながら解釈が違います count=0の場合、countは0となり、count=0の式の戻り値が0 つまりfalseなので条件に合致しなくなるのでループが終了します。 (ちなみに低評価をつけたのは私ではありません)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問