異なる反復対象と利用目的
基本概念の比較
区分 | for...in |
for...of |
---|---|---|
反復対象 | プロパティ(key、インデックス)を反復処理できるオブジェクト | 値(value)を反復処理できるオブジェクト |
ループ | オブジェクトから取得したプロパティ(key、インデックス)を基に動作 | オブジェクトから取得した値(value)を基に動作 |
使用可能なオブジェクト |
|
|
使用用途 | オブジェクトのプロパティ(key)を反復処理する際に使用 | オブジェクトの値(value)を反復処理する際に使用 |
使用目的 | データを操作する目的というよりも、主に一般的なオブジェクト(Plain objects)の特定の値(value)を持つプロパティ(key)を確認するデバッグ用 | オブジェクトの値(value)、つまりデータを操作するため |
例
for...in
for...in
文は、主に反復処理によってデータを操作するというよりも、一般的なオブジェクト(Plain objects)の特定の値(value)を持つプロパティ(key)を確認するデバッグ用として使用されます。
const user = {
name: "太郎",
age: 30
};
for (let key in user) {
console.log(key, ":", user[key]);
}
/*
出力:
"name" : "太郎"
"age" : 30
*/
for...of
for...of
文は、主にオブジェクトの値(value)、つまりデータを操作するために使用されます。例えば、DOMコレクションであるNodeList
オブジェクトの要素を反復処理する際に活用できます。
<ul>
<li>うどん</li>
<li>ラーメン</li>
<li>おにぎり</li>
</ul>
const liElements = document.querySelectorAll("li"); // liセレクタをすべて選択
console.log(liElements); // NodeList(3) [li, li, li]
/* for...of文の適用 */
for (const liElement of liElements) {
console.log(liElement.textContent);
}
// 出力: "うどん" "ラーメン" "おにぎり"
コード補足説明querySelectorAll()
で返されるNodeList
オブジェクトは、擬似配列オブジェクトであり、かつfor...of
文で反復処理可能なオブジェクトです。
考慮すべき点
仕様書
仕様書 | |
---|---|
for...in, for...of
|
ECMAScript Language Specification #sec-for-in-and-for-of-statements |
ブラウザ互換性
文 |
デスクトップ Chrome
|
デスクトップデスクトップ Edge
|
デスクトップ Firefox
|
Safari
|
---|---|---|---|---|
for...in
|
1 | 12 | 1 | 1 |
for...of
|
38 | 12 | 13 | 7 |