for…ofとfor…inの違い | for…of | JavaScript 超完全入門 基本から発展までのすべて

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

for...ofとは?

for...ofは、配列やSetMap、文字列などの反復可能オブジェクト(iterable)の要素を順番に取り出して処理するための繰り返し構文です。インデックスではなく要素そのものを取得できるため、配列を扱う際によく利用されます。

for...inとは?

for...inは、オブジェクトのプロパティ名(キー)を列挙するための構文です。配列に対して使用することもできますが、配列の処理には適しておらず、現在では配列にはfor...ofや通常のfor文を使用することが推奨されています。

for...ofの使用例

配列の要素を順番に取り出して処理する例です。

const fruits = ["apple", "banana", "orange"];

for (const fruit of fruits) {
    console.log(fruit);
}

実行結果

  • apple
  • banana
  • orange

この例では、配列の各要素が順番にfruitへ代入されます。

  1. 1回目は"apple"が代入されます。
  2. 2回目は"banana"が代入されます。
  3. 3回目は"orange"が代入されます。
  4. 最後まで処理するとループが終了します。

for...inの使用例

オブジェクトのプロパティを列挙する例です。

const user = {
    name: "Taro",
    age: 25,
    city: "Tokyo"
};

for (const key in user) {
    console.log(key + ": " + user[key]);
}

実行結果

  • name: Taro
  • age: 25
  • city: Tokyo

keyにはプロパティ名が入り、user[key]で対応する値を取得しています。

配列に対するfor...inの問題点

配列はオブジェクトの一種であるため、独自のプロパティを追加できます。そのため、for...inでは配列の要素以外も列挙される可能性があります。

const fruits = ["apple", "banana", "orange"];

fruits.color = "red";

for (const index in fruits) {
    console.log(index + ": " + fruits[index]);
}

実行結果

  • 0: apple
  • 1: banana
  • 2: orange
  • color: red

このように、追加したcolorプロパティまで列挙されるため、配列を処理する用途には適していません。

文字列やSet・Mapでも利用できる

for...ofは配列だけでなく、反復可能オブジェクトであれば同じように利用できます。

文字列の例

const text = "Java";

for (const ch of text) {
    console.log(ch);
}

1文字ずつ取り出して処理できます。

Setの例

const numbers = new Set([10, 20, 30]);

for (const value of numbers) {
    console.log(value);
}

Setの各要素を順番に取得できます。

for...ofとfor...inの比較

項目 for...of for...in
取得するもの キー(プロパティ名)
主な用途 配列・文字列・Set・Mapなど オブジェクト
配列への利用 推奨 非推奨
追加プロパティ 列挙されない 列挙される可能性がある

初心者がつまずきやすいポイント

  • for...ofは「値」を取得する。
  • for...inは「キー(プロパティ名)」を取得する。
  • 配列には基本的にfor...ofを使用する。
  • オブジェクトにはfor...inまたはObject.keys()などを利用することが多い。
  • MapSetfor...ofで簡単に繰り返し処理できる。

まとめ

  • for...ofは配列などの要素(値)を順番に取得する構文である。
  • for...inはオブジェクトのプロパティ名を列挙する構文である。
  • 配列を処理する場合はfor...ofの使用が推奨される。
  • 配列に対してfor...inを使うと追加したプロパティまで列挙される可能性がある。
  • for...ofは配列だけでなく、文字列・Set・Mapなどの反復可能オブジェクトでも利用できる。