JavaScript/in
表示
in
[編集]in は、JavaScript におけるキーワードで、主に以下の 2 つの用途で使用されます:
これらの構文は、JavaScript におけるループ処理やプロパティの存在確認において非常に重要です。
構文
[編集]for (let key in オブジェクト) { // key はオブジェクトの各プロパティ名 }
この構文では、オブジェクトのすべての列挙可能なプロパティ(そのオブジェクト自身のプロパティおよびそのプロトタイプチェーン上のプロパティ)を順番に取り出して処理します。
プロパティ名 in オブジェクト;
in
演算子は、指定したプロパティ名がオブジェクトに存在するかどうかを調べるために使用します。この演算子は、オブジェクトがそのプロパティを持っている場合に true
を返します。プロトタイプチェーン上のプロパティも含めて検出します。
使用例
[編集]const person = { name: 'John', age: 30, occupation: 'Engineer' }; for (const key in person) { console.log(key, person[key]); }
この例では、person オブジェクトのすべてのプロパティを列挙して、プロパティ名とその値を表示します。
const person = { name: 'John', age: 30 }; console.log('name' in person); // true console.log('occupation' in person); // false
この例では、person オブジェクトに name プロパティが存在するため true
が、occupation プロパティは存在しないため false
が返されます。
注意点
[編集]- プロトタイプチェーン:
for...in
ループおよびin
演算子は、オブジェクトが持つプロトタイプチェーン上のプロパティも検出します。これを回避するためには、hasOwnProperty()
メソッドを使用して、オブジェクト自身のプロパティだけを確認することができます。 - 配列の扱い: 配列に対して
for...in
ループを使用することはできますが、配列のインデックスが整数である場合、配列の順序が保証されないため、通常はfor
ループまたはfor...of
ループを使う方が適切です。
hasOwnProperty()
を使ったプロパティのフィルタリング
[編集]const person = { name: 'John', age: 30 }; for (const key in person) { if (person.hasOwnProperty(key)) { console.log(key, person[key]); } }
この例では、hasOwnProperty()
メソッドを使って、person オブジェクトが自身で持つプロパティだけを列挙しています。