JavaScript/for...in
for...in
編集for...in は、JavaScript においてオブジェクトの列挙可能なプロパティを反復処理するための制御文です。この構文を使用すると、オブジェクトのすべての列挙可能なプロパティのキーを順に取得することができます。
構文
編集for (variable in object) { // 実行するコード }
各部分の説明:
for...in
はプロトタイプチェーン上のすべての列挙可能なプロパティを含むため、注意が必要です。
使用例
編集オブジェクトのプロパティを列挙
編集// オブジェクトの列挙例 const person = { name: 'Alice', age: 30, city: 'Tokyo' }; for (let key in person) { console.log(`${key}: ${person[key]}`); }
この例では、person
オブジェクトのすべてのプロパティ名が key
に代入され、その値を取り出しています。
プロトタイプチェーンの影響
編集// プロトタイプチェーン上のプロパティも列挙される例 const obj = Object.create({ inheritedProp: 'value' }); obj.ownProp = 'ownValue'; for (let key in obj) { console.log(key); // "inheritedProp" と "ownProp" が出力される }
この例では、Object.create
を使用して生成されたオブジェクトのプロトタイプ上のプロパティも列挙されることを示しています。
hasOwnProperty
の使用
編集
// オブジェクト自身のプロパティのみを列挙 for (let key in obj) { if (obj.hasOwnProperty(key)) { console.log(key); // "ownProp" のみ出力される } }
この例では、hasOwnProperty
メソッドを使用して、オブジェクト自身のプロパティのみを列挙しています。
注意点
編集- 配列には非推奨: 配列の反復には
for...in
を使用しないでください。配列のインデックスを列挙する目的では、for...of
や通常のfor
文を使用することが推奨されます。 - プロトタイプチェーンの影響:
for...in
はプロトタイプチェーン上のプロパティも列挙するため、必要に応じてhasOwnProperty
を使用してください。 - プロパティの順序:
for...in
はプロパティを特定の順序で反復処理することを保証しません。