このページでは、JavaScriptの「for…of文」について分かりやすく解説しています。
基本的な使い方や応用方法など、実際にコードの例を交えて解説していますので参考にしてみてください。
ノーノちゃん
ぶたさん
このページの目次
1. JavaScriptのfor…of文とは?
まずはじめにJavaScriptのfor…of文について解説します。
基本的な情報やfor…of文が使用できるデータなどについて、くわしく書いていますのでチェックしてみてください。
基本情報
構文名 | for...of文 |
---|---|
登場時期 | ES6(2015年) |
使える対象 | ・配列 ・文字列 ・Map ・Set ・arguments |
使えない対象 | ・数値 ・オブジェクト |
制御構文の使用 | break :◯continue :◯return :◯ |
主な役割 | 配列や文字列などの値をひとつずつ順番に取り出して処理する |
基本文法 | for (const 変数名 of 配列名) |
主な役割
「for…of文」は、配列や文字列などの並べられたデータを、ひとつずつ順番どおりに取り出して処理することができる構文です。
たとえば、下記のように果物の名前が入った配列があった場合に、それを1つずつ取り出して画面に表示するということができます。
const fruits = ["りんご", "みかん", "バナナ"];
for (const fruit of fruits) {
console.log(fruit);
}
りんご
みかん
バナナ
このようにfor…of文は並べられたデータをひとつずつ処理することができます。
JavaScriptではとてもよく使われる構文なので、しっかり覚えておきましょう。
ノーノちゃん
ぶたさん
使える対象データ
for…of文は「iterator(イテレータ)を持ったデータ」に対して使用できます。
イテレータをとは、かんたんに言うとデータの中身を1つずつ順番に取り出せる機能のことです。
つまり、その順番に取り出す機能(イテレータ)を持ったデータであれば、for…of文を使って中身を1つずつ取り出すことができます。
ぶたさん
for…of文が使えるデータ

データの種類 | 意味 | 例 |
---|---|---|
配列 (Array) |
順番に並んだデータのリスト | ["あ","い","う"] |
文字列 (String) |
文字が並んだもの | "あいう" |
Map (オブジェクト) |
キーと値を入れられるフォルダ (順番が決まっている) | new Map([["キー1", 値1],["キー2", 値2]]); |
Set (オブジェクト) |
値だけを集めたデータ | new Set(["値", "値", "う"]) |
TypedArray (オブジェクト) |
特定の型で作られた配列 | new Uint8Array([1, 2, 3]) |
arguments (オブジェクト) |
関数に渡された引数の一覧 | function showArgs(...args) {}showArgs("A", "B", "C"); |
DOM (コレクション) |
HTML要素の一覧など | document.querySelectorAll("p") |
for…of文が使えないデータ

データの種類 | 意味 | 例 |
---|---|---|
数値 | 単なる数字 (計算できる数字) |
123 |
オブジェクト | キーと値を入れられるフォルダ (順番が決まっていない) |
{キー1:値1,キー2:値2} |
2. for…of文の書き方(基礎)
ここでは、for…of文の基本的な書き方をご紹介します。
配列や文字列などのデータから、要素や値を1つずつ順番に取り出すための方法を分かりやすく解説していますので参考にしてみてください。
基本的な文法
for (const 変数名 of 対象データ名) {
//処理内容
}
部分 | 意味 |
---|---|
for |
「繰り返し処理をしますよ」という宣言 |
const |
「変更できない変数(箱)を作る」という宣言 |
変数名 |
配列や文字列などから取り出された値がここに入る(好きな名前でOK) |
of |
「?の中身を1つずつ取り出す」という意味 |
対象データ名 |
処理をしたいデータの名前(変数名、配列名など) |
処理内容 |
取り出した値に対して実行する処理を書く |
配列を処理

コードの書き方
const 配列名 = ["値1", "値2", "値3"];
for (const 変数名 of 配列名) {
//処理内容
}
コードの例と解説
const animals = ["猫", "犬", "うさぎ"];
for (const animalhouse of animals) {
console.log(animalhouse);
}
猫
犬
うさぎ
const animals = ["猫", "犬", "うさぎ"];
「animals」という名前の変数を作り、配列[]の中に「猫」「犬」「うさぎ」という要素を入れる。for (const animalhouse of animals)
変数「animals」の中から1つずつ要素を取り出して、「animalhouse」という変数に入れる繰り返しを始める。console.log(animalhouse);
変数「animalhouse」の中身をコンソール画面に表示する。
【配列のコード】
const animals = ["猫", "犬", "うさぎ"];
コード | 種別 | 意味 |
---|---|---|
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
animals |
配列名 | リストの名前 |
= |
代入演算子 | 右のものを左に入れる |
[] |
配列 | リスト |
"猫" "犬" "うさぎ" |
要素 | リストの中身 |
"" |
囲い記号 | 囲まれたものを文字列として扱う |
, |
カンマ演算子 | 左から順に実行して結果を返す |
; |
区切り記号 | 文末につける記号 |
【for…of文のコード】
for (const animalhouse of animals) {
console.log(animalhouse);
}
コード | 種別 | 意味 |
---|---|---|
for |
制御構文 | 指定した回数だけ処理をくり返す命令 |
() |
カッコ | for文の制御部分 |
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
animalhouse |
変数名 | 変数(箱)の名前 |
of |
演算子 | 〜の中身を1つずつ取り出す |
animals |
配列名 | リストの名前 |
{} |
ブロック スコープ |
{} 内にくり返したい処理を書く |
console.log() |
出力命令 | () の中身をコンソールに表示 |
文字列を処理

値
を1つずつ順番に取り出す方法です。コードの書き方
const 変数名1 = "文字列";
for (const 変数名2 of 変数名1) {
//処理内容
}
コードの例と解説
const text = "こんにちは";
for (const a of text) {
console.log(a);
}
こ
ん
に
ち
は
const text = "こんにちは";
「text」という名前の変数を作り、その中に「こんにちは」という文字列を入れる。for (const a of text)
変数「text」の中から1つずつ値を取り出して、「a」という変数に入れる繰り返しを始める。console.log(animalhouse);
変数「a」の中身をコンソール画面に表示する。
【文字列のコード】
const text = "こんにちは";
コード | 種別 | 意味 |
---|---|---|
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
text |
変数名 | 変数(箱)の名前 |
= |
代入演算子 | 右のものを左に入れる |
"こんにちは" |
文字列 | 文字が並んだもの |
"" |
囲い記号 | 囲まれたものを文字列として扱う |
; |
区切り記号 | 文末につける記号 |
【for…of文のコード】
for (const a of text) {
console.log(a);
}
コード | 種別 | 意味 |
---|---|---|
for |
制御構文 | 指定した回数だけ処理をくり返す命令 |
() |
カッコ | for文の制御部分 |
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
a |
変数名 | 変数(箱)の名前 |
of |
演算子 | 〜の中身を1つずつ取り出す |
text |
配列名 | リストの名前 |
{} |
ブロック スコープ |
{} 内にくり返したい処理を書く |
console.log() |
出力命令 | () の中身をコンソールに表示 |
3. for…of文の書き方(応用)
continueで特定の値をスキップ

continue
(コンティニュー)を使って特定の要素や値のみをスキップする方法です。const fruits = ["りんご", "スイカ", "もも", "みかん"];
for (const basket of fruits) {
if (basket === "スイカ") continue; // スイカはスキップ
console.log(basket);
}
りんご
もも
みかん
const fruits = ["りんご", "スイカ", "もも", "みかん"];
「animals」という名前の変数を作り、配列[]の中に「りんご」「スイカ」「もも」「みかん」という要素を入れる。for (const basket of fruits)
配列「fruits」の中から、1つずつ果物を取り出して「basket」という変数に入れる繰り返しを始める。if (basket === "スイカ") continue;
もし取り出した果物(basket)が「スイカ」だったら、このループの中の処理はスキップして次の果物に進む。console.log(basket);
変数「basket」の中身をコンソール画面に表示する。
【配列のコード】
const fruits = ["りんご", "スイカ", "もも", "みかん"];
コード | 種別 | 意味 |
---|---|---|
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
animals |
配列名 | リストの名前 |
= |
代入演算子 | 右のものを左に入れる |
[] |
配列 | リスト |
"りんご" "スイカ" "もも" "みかん" |
要素 | リストの中身 |
"" |
囲い記号 | 囲まれたものを文字列として扱う |
, |
カンマ演算子 | 左から順に実行して結果を返す |
; |
区切り記号 | 文末につける記号 |
【for…of文のコード】
for (const basket of fruits) {
if (basket === "スイカ") continue; // スイカはスキップ
console.log(basket);
}
コード | 種別 | 意味 |
---|---|---|
for |
制御構文 | 指定した回数だけ処理をくり返す命令 |
() |
カッコ | for文の制御部分 |
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
basket |
変数名 | 変数(箱)の名前 |
of |
演算子 | 〜の中身を1つずつ取り出す |
fruits |
配列名 | リストの名前 |
{} |
ブロック スコープ |
{} 内にくり返したい処理を書く |
if |
条件分岐 | もし〇〇なら処理を分ける |
basket === "スイカ" |
条件式 | basketの中身が「スイカ」と等しいかどうか |
=== |
厳密等価 演算子 |
左右の値が「型も値も同じ」かどうか比較 |
continue |
制御文 | この回の処理をスキップして次のループへ進む |
console.log() |
出力命令 | () の中身をコンソールに表示 |
breakで処理を途中で抜ける

break
(ブレイク)を使って処理を途中で抜ける方法です。const numbers = [1, 2, 3, 4, 5];
for (const num of numbers) {
if (num > 3) break; // 3以上なら処理を中断
console.log(num);
}
1
2
3
const numbers = [1, 2, 3, 4, 5];
「numbers」という名前の変数を作り、配列[]の中に「1,2,3,4,5」という数値を入れる。for (const num of numbers)
配列「numbers」の中から1つずつ数値を取り出して「num」という変数に入れる繰り返しを始める。if (num > 3) break;
もし取り出した数字が「3より大きい」なら処理を終了する。console.log(num);
変数「num」の中身をコンソール画面に表示する。
【配列のコード】
const numbers = [1, 2, 3, 4, 5];
コード | 種別 | 意味 |
---|---|---|
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
numbers |
配列名 | リストの名前 |
= |
代入演算子 | 右のものを左に入れる |
[] |
配列 | リスト |
1 2 3 4 5 |
要素 | リストの中身 |
"" |
囲い記号 | 囲まれたものを文字列として扱う |
, |
カンマ演算子 | 左から順に実行して結果を返す |
; |
区切り記号 | 文末につける記号 |
【for…of文のコード】
for (const num of numbers) {
if (num > 3) break;
console.log(num);
}
コード | 種別 | 意味 |
---|---|---|
for |
制御構文 | 指定した回数だけ処理をくり返す命令 |
() |
カッコ | for文の制御部分 |
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
num |
変数名 | 変数(箱)の名前 (ここでは配列の要素を入れる箱) |
of |
演算子 | 〜の中身を1つずつ取り出す |
numbers |
配列名 | リストの名前 |
{} |
ブロック スコープ |
{} 内にくり返したい処理を書く |
if |
条件分岐 | もし〇〇なら処理を分ける |
num > 3 |
条件式 | num が3 未満の間は処理を繰り返す |
> |
比較演算子 | 左が右より大きい |
break |
制御文 | ループを途中で終了して抜ける |
console.log() |
出力命令 | () の中身をコンソールに表示 |
returnを使う

function findFirstBiggerThanThree(numbers) {
for (const num of numbers) {
if (num > 3) {
return num; // 3より大きい数字を見つけたら返す
}
}
return null; // 見つからなければnullを返す
}
const result = findFirstBiggerThanThree([1, 2, 3, 4, 5]);
console.log(result);
4
function findFirstBiggerThanThree(numbers)
「findFirstBiggerThanThree(3より大きい最初の数字を見つける)」という関数を作り、引数として「numbers」という配列を受け取る。for (const num of numbers)
配列「numbers」の中から1つずつ数値を取り出して「num」という変数に入れる繰り返しを始める。if (num > 3) {return num;}
「num」が3より大きければ、その数字をすぐに関数の結果として返して終了する。return null;
もし最後まで3より大きい数字がなければ「null(値がない状態)」を返す。const result = findFirstBiggerThanThree([1, 2, 3, 4, 5]);
console.log(result);
配列 [1, 2, 3, 4, 5] を関数に渡して最初に3より大きい数字を探して「result」に代入し、結果を表示する。
function findFirstBiggerThanThree(numbers) {
for (const num of numbers) {
if (num > 3) {
return num; // 3より大きい数字を見つけたら返す
}
}
return null; // 見つからなければnullを返す
}
【関数のコード】
コード | 種別 | 意味 |
---|---|---|
function |
関数宣言 | 「これから〇〇という処理をまとめた箱を作るよ」という宣言 |
findFirstBiggerThanThree |
関数名 | 関数の名前 |
numbers |
引数 | 関数に渡される配列 |
for |
制御構文 | 指定した回数だけ処理をくり返す命令 |
() |
カッコ | for文の制御部分 |
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
num |
変数名 | 変数(箱)の名前 |
of |
演算子 | 〜の中身を1つずつ取り出す |
numbers |
配列名 | リストの名前 |
if |
条件分岐 | もし〇〇なら処理を分ける |
num > 3 |
条件式 | num が3 未満の間は処理を繰り返す |
> |
比較演算子 | 左が右より大きい |
return |
制御構文 | 関数内で処理した結果を結果を返す |
num |
変数名 | 変数(箱)の名前 |
null |
値 | 「何もない」ことを表す特別な値 |
; |
区切り記号 | 文末につける記号 |
【関数の呼び出しと結果表示のコード】
const result = findFirstBiggerThanThree([1, 2, 3, 4, 5]);
console.log(result);
コード | 種別 | 意味 |
---|---|---|
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
result |
変数名 | 変数(箱)の名前 (ここでは関数の返り値を入れる箱) |
findFirstBiggerThanThree() |
関数 呼び出し |
引数の配列から3より大きい最初の数字を返す関数を実行 |
[1, 2, 3, 4, 5] |
配列 | 数値のリスト |
console.log() |
出力命令 | () の中身をコンソールに表示 |
indexを取得

const animals = ["ねこ", "いぬ", "うさぎ"];
for (const [index, animalhouse] of animals.entries()) {
console.log(`${index}番目は ${animalhouse} です`);
}
0番目は ねこ です
1番目は いぬ です
2番目は うさぎ です
const animals = ["ねこ", "いぬ", "うさぎ"];
「animals」という名前の変数を作り、配列[]の中に「ねこ」「いぬ」「うさぎ」という要素を入れる。for (const [index, animalhouse] of animals.entries())
「animals」の中から1つずつ要素を取り出して、そのときの順番(index)と中身(animal)をセットで「index」と「animal」という変数に入れる繰り返しを始める。console.log(`${index}番目は ${animal} です`);
何番目の動物か(index)と、その動物の名前(animal)を使って「〇番目は △△ です」とコンソール画面に表示する。
【配列のコード】
const animals = ["ねこ", "いぬ", "うさぎ"];
コード | 種別 | 意味 |
---|---|---|
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
animals |
配列名 | リストの名前 |
= |
代入演算子 | 右のものを左に入れる |
[] |
配列 | リスト |
"ねこ" "いぬ" "うさぎ" |
要素 | リストの中身 |
"" |
囲い記号 | 囲まれたものを文字列として扱う |
, |
カンマ演算子 | 左から順に実行して結果を返す |
; |
区切り記号 | 文末につける記号 |
【for…of文のコード】
for (const [index, animalhouse] of animals.entries()) {
console.log(`${index}番目は ${animalhouse} です`);
}
コード | 種別 | 意味 |
---|---|---|
for |
制御構文 | 指定した回数だけ処理をくり返す命令 |
() |
カッコ | for文の制御部分 |
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
index |
変数名 | 変数(箱)の名前 (ここでは配列の番号を入れる箱) |
animalhouse |
変数名 | 変数(箱)の名前 (ここでは配列の要素を入れる箱) |
of |
演算子 | 〜の中身を1つずつ取り出す |
animals |
配列名 | リストの名前 |
entries() |
メソッド | 配列のキー/値(番号/要素)を取り出す機能 |
{} |
ブロック スコープ |
{} 内にくり返したい処理を書く |
console.log() |
出力命令 | () の中身をコンソールに表示 |
`` |
テンプレート リテラル記号 |
文字列の始まりと終わりを示す |
${} |
プレース ホルダ |
{} 内で指定した変数の中身を入れる |
Setの値を取得

for...of
を使って、Setオブジェクトの値を取り出す方法です。const fruits = new Set(["みかん", "もも", "バナナ", "スイカ"]);
for (const basket of fruits) {
console.log(basket);
}
みかん
もも
バナナ
スイカ
const fruits = new Set(["みかん", "もも", "バナナ", "スイカ"]);
「fruits」という名前の変数を作り、[]の中に「みかん」「もも」「バナナ」「スイカ」という値を入れる。for (const basket of fruits)
変数「fruits」の中から1つずつ要素を取り出して、「basket」という変数に入れる繰り返しを始める。console.log(basket);
変数「basket」の中身をコンソール画面に表示する。
【配列のコード】
const fruits = new Set(["みかん", "もも", "バナナ", "スイカ"]);
コード | 種別 | 意味 |
---|---|---|
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
fruits |
オブジェクト名 | Setオブジェクトの名前 |
= |
代入演算子 | 右のものを左に入れる |
new Set |
オブジェクト 生成 |
重複する値 を入れられないSetオブジェクトを作成 |
[] |
配列 | リスト |
"みかん" "もも" "バナナ" "スイカ" |
値 | 配列の中身 |
"" |
囲い記号 | 囲まれたものを文字列として扱う |
, |
カンマ演算子 | 左から順に実行して結果を返す |
; |
区切り記号 | 文末につける記号 |
【for…of文のコード】
for (const basket of fruits) {
console.log(basket);
}
コード | 種別 | 意味 |
---|---|---|
for |
制御構文 | 指定した回数だけ処理をくり返す命令 |
() |
カッコ | for文の制御部分 |
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
basket |
変数名 | 変数(箱)の名前 |
of |
演算子 | 〜の中身を1つずつ取り出す |
fruits |
オブジェクト名 | Setオブジェクトの名前 |
{} |
ブロック スコープ |
{} 内にくり返したい処理を書く |
console.log() |
出力命令 | () の中身をコンソールに表示 |
Mapのキーと値を取得

for...of
を使って、Mapオブジェクトの「キー」と「値」を取り出す方法です。const userAges = new Map([
["田中", 25],
["鈴木", 30],
["佐藤", 28]
]);
for (const [name, age] of userAges) {
console.log(`${name}さんは${age}歳です`);
}
田中さんは25歳です
鈴木さんは30歳です
佐藤さんは28歳です
const userAges = new Map([]);
「userAges」という名前の変数を作り、Mapオブジェクト[]の中に「キー,値」を入れる。for (const [name, age] of userAges)
Mapオブジェクトから1組ずつ「キー」と「値」を取り出して「name」と「age」という変数に入れる。console.log(`${name}さんは${age}歳です`);
「◯◯(index)さんは◯◯(animal)歳です」とコンソール画面に表示する。
【配列のコード】
const userAges = new Map([
["田中", 25],
["鈴木", 30],
["佐藤", 28]
]);
コード | 種別 | 意味 |
---|---|---|
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
userAges |
オブジェクト名 | Mapオブジェクトの名前 |
= |
代入演算子 | 右のものを左に入れる |
new Map |
オブジェクト 生成 |
キー と値 のペアを持つMapオブジェクトを作成 |
[] |
配列 | リスト |
["田中", 25] ["鈴木", 30] ["佐藤", 28] |
要素 (キー、値) |
キー と値 のペア |
"" |
囲い記号 | 囲まれたものを文字列として扱う |
, |
カンマ演算子 | 左から順に実行して結果を返す |
; |
区切り記号 | 文末につける記号 |
【for…of文のコード】
for (const [name, age] of userAges) {
console.log(`${name}さんは${age}歳です`);
}
コード | 種別 | 意味 |
---|---|---|
for |
制御構文 | 指定した回数だけ処理をくり返す命令 |
() |
カッコ | for文の制御部分 |
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
[name, age] |
分割代入 | 1組の要素(["田中", 25] など)をname とage に分けて代入 |
of |
演算子 | 〜の中身を1つずつ取り出す |
userAges |
オブジェクト名 | Mapオブジェクトの名前 |
{} |
ブロック スコープ |
{} 内にくり返したい処理を書く |
console.log() |
出力命令 | () の中身をコンソールに表示 |
`` |
テンプレート リテラル記号 |
文字列の始まりと終わりを示す |
${} |
プレース ホルダ |
{} 内で指定した変数の中身を入れる |
DOMを取得

たとえば「見出し」「文章」「画像」「ボタン」「リスト」など、ページ内にあるそれぞれのパーツがDOM要素に当たります。
用語 | 意味 |
---|---|
DOM | ウェブページの構造を表すツリー状のもの |
DOM要素 | ページ内のパーツ(見出し、画像など) |
<ul>
<li>りんご</li>
<li>みかん</li>
<li>バナナ</li>
</ul>
const items = document.querySelectorAll("li");
for (const item of items) {
console.log(item.textContent);
}
りんご
みかん
バナナ
const items = document.querySelectorAll("li");
HTMLの中からli
の要素を抜き出し「items」という変数に保存する。for (const item of items)
変数「items」の中から1つずつli
の要素を取り出して「item」という変数に入れる繰り返し処理。console.log(item.textContent);
「item」の中にあるテキストのみをコンソール画面に表示する。
【HTML要素の取得するコード】
const items = document.querySelectorAll("li");
コード | 種別 | 意味 |
---|---|---|
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
items |
変数名 | 変数(箱)の名前 ( li の要素をまとめて入れる変数の名前) |
= |
代入演算子 | 右のものを左に入れる |
document |
オブジェクト | 現在のHTMLページを表す特別なオブジェクト。 |
querySelectorAll(); |
メソッド | 指定したパーツ(特定の要素)を取得 |
querySelectorAll("li"); |
メソッド | li の要素を取り出す命令 |
; |
区切り記号 | 文末につける記号 |
【for…of文のコード】
for (const item of items) {
console.log(item.textContent);
}
コード | 種別 | 意味 |
---|---|---|
for |
制御構文 | 指定した回数だけ処理をくり返す命令 |
() |
カッコ | for文の制御部分 |
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
item |
変数名 | 変数(箱)の名前 |
of |
演算子 | 〜の中身を1つずつ取り出す |
items |
変数名 | 変数(箱)の名前 (HTMLの中から取得した要素が入っている) |
{} |
ブロック スコープ |
{} 内にくり返したい処理を書く |
console.log() |
出力命令 | () の中身をコンソールに表示 |
item.textContent |
プロパティ参照 | li の要素の中に書かれているテキストを取得 |
4. よくある質問
ここではfor…of文に関するよくある質問をご紹介しています。
配列とは?
「配列(はいれつ)」とは、複数の値(データ)をひとまとめにして管理できるリストのようなものです。
たとえば、複数の人物の名前を処理したいときに、下記のようにひとつずつ変数を作るのは大変ですよね。
const name1 = "山田花子";
const name2 = "鈴木ゆき";
const name3 = "松田次郎";
こんなときに便利なのが「配列」です。
配列を使えば、次のように複数の値をひとつの変数でまとめて管理することができます。
const names = ["山田花子", "鈴木ゆき", "松田次郎"];
このように配列を使うことで、コードがすっきりして読みやすくなったり、データの追加や繰り返し処理がかんたんになるメリットがあります。
配列はJavaScriptでとてもよく使われる基本のしくみなので、使いこなせるようにしておくことをおすすめします。
オブジェクトに使える?
for…of文はオブジェクトに使うことはできません。
なぜなら、オブジェクトは「iterator(イテレータ)を持ったデータ」ではないからです。
詳しい情報については「使える対象データ」をご覧ください。
for…in文との違い
for…of文とfor…in文との違いは次のようになります。
for…of | for…in | |
---|---|---|
対象 | 配列 文字列 Map/Set など |
オブジェクト |
処理方法 | 順番どおりに1つずつ | 1つずつ(順番は保証されない) |
制御構文使用 | break continue return |
break continue return |
主な用途 | 様々なデータを順番に処理したいとき | オブジェクトのプロパティを調べたいとき |

for…ofとforEachの違い
for…of文とforEach文はどちらも「繰り返し処理」をする構文ですが、次のような違いがあります。
for…of | forEach | |
---|---|---|
対象 | 配列 文字列 Map/Set など |
配列 |
制御構文使用 | break continue return |
return |
主な用途 | 様々なデータを順番に処理したいとき | 配列を順番に処理したいとき |
for await…of文とは?
for await…of文は、1つずつ順番にゆっくり取り出すことができる構文です。
通常のfor…of文との違いは次のようになります。
構文 | 意味 |
---|---|
for(of) |
すぐに全部のデータを取り出す |
for await(of) |
データを1つずつ順番を待ちながらゆっくり取り出す |
ぶたさん
async function* getFruits() {
const list = ['りんご', 'みかん', 'ぶどう'];
for (let i = 0; i < list.length; i++) {
await new Promise(function(resolve) {
setTimeout(function() {
resolve();
}, 1000); // 1秒待つ
});
yield list[i];
}
}
async function showFruits() {
for await (const fruit of getFruits()) {
console.log(fruit);
}
}
showFruits();
りんご // 1秒後に表示
みかん // 1秒後に表示
ぶどう // 1秒後に表示
5. まとめ
for…of文は、配列や文字列など「イテレータを持ったデータ」を、順番に1つずつ取り出して処理するための構文です。
JavaScriptでループ処理をシンプルに書きたいときに便利で、特に配列などの中身を順番に処理したい場面でよく使われます。
forEach文と似ていますが、break
,continue
,return
などが使えるため、処理の流れを途中で止めたり飛ばしたりすることができる特徴があります。
- for…of文は配列や文字列などを順番どおりに取り出すことができる構文
- イテレータを持ったデータならすべて使える
continue
やbreak
を使うことができる- forEach文と似ているが自由度が高い