質問: 1; while(i <= 100) { if(i%3===0 && i%5===0){ console.log("FizzBuzz"); }else if(i%3 ===0) { console.log("Fizz"); }else if(i%5 ===0){ console.log("Buzz"); } console.log(i); i ++; } コード ``` こうなります。↓ ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/96f0a673535084abadaf45928f4ed060.png) なぜでしょうか? #### 初歩的な質問ですが、回答、よろしくお願いいたします。
回答: > > なぜ、3の倍数「且つ」5の倍数の "&&" は、if文の中で先頭に書かないとダメなのでしょうか? > > > `javascript`の`if .. else if .. else`は、条件に合致している場合は以降の条件で判定しないからです。 この例でいうと、「**3の倍数「且つ」5の倍数**」を先に書いておかないと**「3の倍数]**もしくは**「5の倍数」**の条件に引っかかってしまうからです。 例えば ``` // 条件1 if (i % 5 ===0){ console.log("Buzz"); // 条件2 }else if (i % 3 ===0) { console.log("Fizz"); // 条件3 }else if(i % 3 ===0 && i % 5===0){ console.log("FizzBuzz"); } ``` とした場合、**条件2**は**条件1**が偽(`false`)の場合にはじめて評価されます。**条件3**も同様です。 したがって、この例だと`15`などの値も**条件1**に先に引っかかってしまうため、`"Buzz"`と表示されてしまいます。 > > 以下のように記述すると、なぜ、3の倍数、5の倍数、3かつ5の倍数が、それぞれ、Fizz、Buzz、FizzBuzz にならず、数字の間に挟み込まれるのでしょうか? > > > `console.log(i);`が`i`の値によらず、必ず実行されるためです。 もし数字の置き換えを実現したい場合は`else`を追加してその中で実行するとよいです。 ``` for(var i = 1; i <= 100; i++ ){ if(i % 3 ===0 && i % 5===0){ console.log("FizzBuzz"); }else if (i % 5 ===0){ console.log("Buzz"); }else if (i % 3 ===0) { console.log("Fizz"); } // 上記のいずれも満たさない場合は数字を表示 else { console.log(i); } } ```