JavaScriptのfor...in
ループは、オブジェクトのプロパティを反復処理するための構文です。for...in
ループを使用すると、オブジェクト内のすべての列挙可能なプロパティを反復処理し、それぞれのプロパティのキーを取得できます。for-in文とは言いますが、for文にカテゴライズされます。
for-inのサンプル
for...in
ループを使用してオブジェクトのプロパティを反復処理するサンプルスクリプトを示します。
let person = {
name: 'Hanako',
age: 30,
city: 'Tokyo'
};
for (let key in person) {
console.log(key + ': ' + person[key]);
}
// 実行結果
name: Hanako
age: 30
city: Tokyo
このスクリプトでは、person
オブジェクトのプロパティを反復処理し、各プロパティのキーと値をコンソールに出力しています。for...in
ループで反復処理するオブジェクトの変数名はperson
であり、for
ループ内でkey
という変数名が定義され、各反復で現在のプロパティのキーが代入されます。console.log()
は、各プロパティのキーと値を出力するために使用されます。
(オブジェクトについては『JavaScript オブジェクトとは何か?概要と記述方法を基礎から解説』を参照してください。)
for-in文の使い方
for (for文内で使用する変数名 in for文で取得したいオブジェクト) {
// プロパティに対する処理
}
for(... in ...){}
の使い方は上記のようになります。一般的にfor-in文と表記されますが厳密にはfor()文の1種にすぎません。
for文:『JavaScriptのfor文(ループ処理)の使い方:初心者向けチュートリアル』
for-inループの注意点
JavaScriptのfor...in
ループを使用する場合、以下のような注意点があります。
- 反復順序がプロパティが定義された順序とは必ずしも一致しない:
for...in
ループで反復処理するプロパティの順序は、プロパティが定義された順序とは必ずしも一致しないため、順序に依存する処理には使用しないことが望ましいです。 - プロトタイプチェーンのプロパティも反復処理される:
for...in
ループは、オブジェクトのプロトタイプチェーンにあるプロパティも反復処理するため、意図しないプロパティを反復処理することがあります。プロトタイプチェーンのプロパティを反復処理したくない場合は、hasOwnProperty()
メソッドを使用して、オブジェクト自身が持つプロパティのみを反復処理するように制御することができます。 - 列挙可能なプロパティのみが反復処理される:
for...in
ループは、列挙可能なプロパティのみを反復処理するため、列挙不可能なプロパティは反復処理されません。(キーが文字列のプロパティのみ処理され、Symbolは無視されます。) - なるべく配列に対して使用しない:
for...in
ループは、オブジェクトのプロパティを反復処理するために設計されており、配列に対して使用すると、意図しないプロパティを反復処理することがあります。代わりに、for
ループやforEach()
メソッドを使用することが望ましいです。
参考:https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for…in