for...in

編集

for...in は、JavaScript においてオブジェクトの列挙可能なプロパティを反復処理するための制御文です。この構文を使用すると、オブジェクトのすべての列挙可能なプロパティのキーを順に取得することができます。

構文

編集
for (variable in object) {
  // 実行するコード
}

各部分の説明:

  • variable: プロパティ名が代入される変数。let, const, または var を使用して宣言できます。
  • 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 を使用して生成されたオブジェクトのプロトタイプ上のプロパティも列挙されることを示しています。

// オブジェクト自身のプロパティのみを列挙
for (let key in obj) {
  if (obj.hasOwnProperty(key)) {
    console.log(key); // "ownProp" のみ出力される
  }
}

この例では、hasOwnProperty メソッドを使用して、オブジェクト自身のプロパティのみを列挙しています。

注意点

編集
  • 配列には非推奨: 配列の反復には for...in を使用しないでください。配列のインデックスを列挙する目的では、for...of や通常の for 文を使用することが推奨されます。
  • プロトタイプチェーンの影響: for...in はプロトタイプチェーン上のプロパティも列挙するため、必要に応じて hasOwnProperty を使用してください。
  • プロパティの順序: for...in はプロパティを特定の順序で反復処理することを保証しません。

関連項目

編集

参考

編集