定義と使用方法
for...in
文は、プロパティ(key)で反復処理できるオブジェクトのためのループ文です。
プロパティ(key)で反復処理できるオブジェクトであれば、どのようなオブジェクトでもfor...in
文で処理することができます。つまり、オブジェクトから取り出したプロパティ(key)を基に動作するループを実行します。
プロパティ(key)で反復処理できるオブジェクトとは、列挙可能(enumerable)なプロパティ(key)を持つオブジェクトを指します。
代表的なものとして、一般的なオブジェクト(Plain objects)があります。
配列も列挙可能なプロパティ(key)を持っています。JavaScriptでは、配列のプロパティ名(key)はインデックス(整数)になります。
基本の例
次に、プロパティ(key)で反復処理できる一般的なオブジェクト(Plain object)をfor...in
文で反復処理する例を示します。
for...in
文を使用してオブジェクトのプロパティ(key)を反復処理する際、各反復ごとに変数には当該プロパティの名前が割り当てられます。これにより、プロパティ名を取得することができます。
const person = {
name: "John",
age: 30,
occupation: "Developer"
}; // オブジェクトリテラルで定義された一般的なオブジェクト(Plain object)
for (let key in person) {
console.log(key); // プロパティ(key)の名前を出力
}
// 出力: "name" "age" "occupation"
構文
for (variable in object) {
// 実行するコード
}
variable
:ループ内で現在反復処理中のプロパティ(key)を格納する変数の名前です。object
:ループで反復処理したいプロパティ名(key)で順に処理できるオブジェクトです。
特徴
for...in
文はオブジェクトのプロパティ(key)を反復処理する機能を提供しますが、いくつかの重要な特徴を考慮する必要があります。以下では、for...in
文の主な特徴について詳しく見ていきます。
オブジェクトのプロパティ(key)を反復処理
for...in
文は、オブジェクトの列挙可能なプロパティ名(key)を反復処理します。そのため、ループごとに変数にはプロパティ名が文字列として代入されます。
プロパティ(key)を反復処理する順序は保証されません
プロパティ(key)を反復処理する順序は、エンジンの実装によって異なる場合があり、仕様上は保証されていません。ほとんどの場合は追加された順序に従いますが、常に一定であるとは仮定できません。
配列の反復処理には適していません
インデックスの順序が重要な配列を反復処理するために使用することは推奨されません。
注意してください!for...in
文は、symbol
でキーが指定されたプロパティを無視します。
for...in
文でオブジェクトの値(value)にアクセスする
for...in
文はオブジェクトの列挙可能なプロパティ名(key)を反復処理するため、実際のプロパティの値(value)には直接アクセスしません。そのため、実際の値にアクセスするには、obj[key]
の形式でアクセスする必要があります。
const user = {
name: "太郎",
age: 30
};
for (let key in user) {
console.log(key, ":", user[key]);
}
/*
出力:
"name" : "太郎"
"age" : 30
*/
有用性
for...in
文の特徴を見てきたように、オブジェクトのプロパティ(key)を反復処理する機能を提供しますが、プロパティを反復処理する順序は保証されない点に注意する必要があります。つまり、配列の反復処理には適していません。
では、for...in
文はどのような場合に使用するのが適しているでしょうか?
主に、for...in
文はデータを操作するための反復処理というよりも、一般的なオブジェクト(Plain objects)の特定の値(value)を持つプロパティ(key)を確認するデバッグ用として使用されます。
仕様書
仕様書 | |
---|---|
for...in
|
ECMAScript Language Specification #sec-for-in-and-for-of-statements |
ブラウザ互換性
文 |
デスクトップ Chrome
|
デスクトップデスクトップ Edge
|
デスクトップ Firefox
|
Safari
|
---|---|---|---|---|
for...in
|
1 | 12 | 1 | 1 |