INDEX
for...ofとは?

for...ofは、配列やSet、Map、文字列などの反復可能オブジェクト(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回目は
"apple"が代入されます。 - 2回目は
"banana"が代入されます。 - 3回目は
"orange"が代入されます。 - 最後まで処理するとループが終了します。
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()などを利用することが多い。 MapやSetはfor...ofで簡単に繰り返し処理できる。
まとめ
for...ofは配列などの要素(値)を順番に取得する構文である。for...inはオブジェクトのプロパティ名を列挙する構文である。- 配列を処理する場合は
for...ofの使用が推奨される。 - 配列に対して
for...inを使うと追加したプロパティまで列挙される可能性がある。 for...ofは配列だけでなく、文字列・Set・Mapなどの反復可能オブジェクトでも利用できる。