JavaScript Forループ

ループは、コードブロックを何度も実行するために使用されます。

JavaScriptのループ

ループは便利であり、同じコードを何度も異なる値で実行したい場合に使用されます。

これは、配列を操作する場合に特に便利です:

次のように書かずに:


text += cars[0] + "<br>";
text += cars[1] + "<br>";
text += cars[2] + "<br>";
text += cars[3] + "<br>";
text += cars[4] + "<br>";
text += cars[5] + "<br>";

次のように書くことができます:


for (let i = 0; i < cars.length; i++) {
  text += cars[i] + "<br>";
}

異なる種類のループ

JavaScriptは異なる種類のループをサポートしています:

  • for – 指定された回数だけコードブロックをループします
  • for/in – オブジェクトのプロパティをループします
  • for/of – イテラブルオブジェクトの値をループします
  • while – 指定された条件がtrueの間、コードブロックをループします
  • do/while – 指定された条件がtrueの間、コードブロックをループします(最低1回は実行されます)

Forループ

for文は、3つのオプションの式でループを作成します:


for (expression 1; expression 2; expression 3) {
  // 実行するコードブロック
}

Expression 1は、コードブロックの実行前に1度だけ実行されます。

Expression 2は、ループの実行条件を定義します。

Expression 3は、コードブロックの実行後に毎回実行されます。


for (let i = 0; i < 5; i++) {
  text += "数値は " + i + "<br>";
}

上記の例から、以下を読み取ることができます:

  • Expression 1は、ループが開始する前に変数を設定します(let i = 0)。
  • Expression 2は、ループが実行される条件を定義します(iは5未満である必要があります)。
  • Expression 3は、コードブロックが実行された後に値を増やします(i++)。

Expression 1

通常、Expression 1ではループで使用する変数を初期化します(let i = 0)。

これは常に必要なわけではありません。JavaScriptでは問題ありません。Expression 1はオプションです。

Expression 1で多くの値を初期化することができます(カンマで区切って):


for (let i = 0, len = cars.length, text = ""; i < len; i++) {
  text += cars[i] + "<br>";
}

また、Expression 1を省略することもできます(ループが開始する前に値が設定されている場合など):


let i = 2;
let len = cars.length;
let text = "";
for (; i < len; i++) {
  text += cars[i] + "<br>";
}

Expression 2

通常、Expression 2は初期変数の条件を評価するために使用されます。

これは常に必要なわけではありません。JavaScriptでは問題ありません。Expression 2もオプションです。

Expression 2がtrueを返す場合、ループは再び開始されます。falseを返す場合、ループは終了します。

Expression 2を省略する場合、ループ内にbreak文を提供する必要があります。そうしないと、ループが終了しません。これによりブラウザがクラッシュします。

Expression 3

通常、Expression 3は初期変数の値を増加させます。

これは常に必要なわけではありません。JavaScriptでは問題ありません。Expression 3もオプションです。

Expression 3は、負の増加(i–)、正の増加(i = i + 15)、その他何でも行うことができます。

Expression 3も省略することができます(ループ内で値を増加させる場合など):


let i = 0;
let len = cars.length;
let text = "";
for (; i < len; ) {
  text += cars[i] + "<br>";
  i++;
}

ループのスコープ

ループ内でvarを使用する場合:


var i = 5;

for (var i = 0; i < 10; i++) {
  // 何らかのコード
}

// ここではiは10です

ループ内でletを使用する場合:


let i = 5;

for (let i = 0; i < 10; i++) {
  // 何らかのコード
}

// ここではiは5です

最初の例ではvarを使用し、ループ内で宣言された変数はループ外の変数を再宣言します。

2番目の例ではletを使用し、ループ内で宣言された変数はループ外の変数を再宣言しません。

ループ内でletを使用して変数iを宣言する場合、その変数はループ内でのみ見えます。