このページでは、for…in文の基本的な書き方、使い方、そして注意点について、初心者にも分かりやすくていねいに解説しています。
「for…in文の書き方がよく分からない…」という方は参考にしてみてくださいね。
ノーノちゃん
ぶたさん
このページの目次
1. JavaScriptのfor…in文とは?
まず、はじめに「for…in文」とは何をするための構文なのかくわしく解説します。
基本情報
構文名 | for...in文 |
---|---|
登場時期 | ES1(1997年) |
使える対象 | ・オブジェクト ・配列 |
制御構文の使用 | break :◯continue :◯return :◯ |
主な役割 | オブジェクトのキーと値を順番に取り出して処理する |
基本文法 | for (const 変数名 in オブジェクト名) |
オブジェクトの中身を取り出す
「for…in文」は、オブジェクトの中にある情報をひとつずつ取り出して処理してくれる構文です。
たとえば、次のようなときに使います。
- オブジェクトの中に何があるか知りたいとき
(どんなデータがあるのか表示したいとき) - すべての情報をまとめて表示や変更したいとき
(ユーザー情報を一括で表示したり、値に「さん」を付け足したりする場合) - データを自動で処理するループを作りたいとき
(人数分のユーザー、商品リストなど、大量データを一括で処理したい場合)
ぶたさん
オブジェクトについて
オブジェクトとは、上記のように複数の情報をまとめて入れられるフォルダのようなものです。
たとえば「1人のユーザー情報」「1つの商品の情報」など、関連する情報をひとつにまとめたいときに使います。
ぶたさん
名称 | 意味・イメージ |
---|---|
オブジェクト |
フォルダそのもの |
オブジェクト名 |
フォルダの名前 |
プロパティ |
フォルダの中のファイル |
キー |
ファイルの名前 |
値 |
ファイルの中に入っているデータ |
2. オブジェクトの作り方
それでは実際にオブジェクトを作ってみましょう。
基本的に作り方はとてもシンプルですので、初心者の方でもかんたんに作ることができます。
基本形

const オブジェクト名 = {
キー: 値,
キー: 値,
キー: 値,
};
const user = {
name: "ぶたさん",
age: 25,
gender: "男性"
};
ユーザー名:ぶたさん
年齢:25歳
性別:男性
const item = {
name: "SEB-M705",
brand: "ロジクール",
price: 4190,
category: "パソコン周辺機器(マウス)",
stock: 5,
};
商品名:SEB-M705
メーカー:ロジクール
価格:4,190円
カテゴリ:パソコン周辺機器(マウス)
在庫:5
- オブジェクトの中は「キー: 値」のセットで書く
- 値を省略したい場合は、変数と同じ名前のキーなら省略可能
応用形(ネスト構造)

分かりやすくたとえると「フォルダの中にフォルダがあり、そのフォルダの中にまたフォルダがある」というような、階層的になっている状態です。
プログラムでは、オブジェクトの中にオブジェクト(または配列)が入っているような構造のことを、ネスト構造と呼びます。
const オブジェクト名 = {
キー1: 値1,
キー2: 値2,
キー3: {
ネストキー1: ネスト値1,
ネストキー2: ネスト値2,
},
};
こちらはオブジェクトの中にオブジェクトに入れた例です。
const book = {
title: "吾輩は猫である",
author: "夏目漱石",
publisher: {
name: "東洋文庫",
year: 1905
}
};
タイトル:吾輩は猫である
作者:夏目漱石
出版社情報:
出版社名:大倉書店
発行年:1907年
こちらはオブジェクトの中にオブジェクト入れ、さらにその中にオブジェクトを入れた例です。
const single = {
title: "キセキ",
artist: "GReeeeN",
releaseYear: 2008,
tracks: {
track1: {
title: "キセキ",
duration: "4:35",
lyricist: "GReeeeN",
composer: "GReeeeN"
},
track2: {
title: "ルーキーズ",
duration: "3:55",
lyricist: "GReeeeN",
composer: "GReeeeN",
arranger: "GReeeeN"
}
},
genre: "J-POP"
};
タイトル:キセキ
アーティスト:GReeeeN
発売年:2008年
収録曲:
1曲目:キセキ
時間:4分35秒
作詞:GReeeeN
作曲:GReeeeN
2曲目:ルーキーズ
時間:3分55秒
作詞:GReeeeN
作曲:GReeeeN
編曲:GReeeeN
ジャンル:J-POP
こちらはオブジェクトの中にオブジェクトと配列を入れた例です。
const student = {
name: "山田太郎",
age: 16,
grade: 2,
class: "A組",
contact: {
phone: "090-1234-56XX",
email: "yamada@example.com"
},
subjects: ["国語", "数学", "英語", "理科", "社会"],
scores: {
国語: 85,
数学: 92,
英語: 78,
理科: 88,
社会: 90
},
club: {
name: "野球部",
position: "ピッチャー"
},
};
名前:山田太郎
年齢:17歳
学年:2年生
クラス:A組
連絡先:
電話番号:090-1234-56XX
メールアドレス:yamada@example.com
教科情報:国語、数学、英語、理科、社会
点数:
国語: 85点
数学: 92点
英語: 78点
理科: 88点
社会: 90点
所属クラブ:
部活名:野球部
ポジション:ピッチャー
ぶたさん
3. for…in文の書き方(基礎編)
ここでは、JavaScriptの「for…in文」の基本的な書き方をご紹介しています。
キーを取得

キー
を取得する方法です。コードの書き方
const オブジェクト名 = {
キー: 値,
キー: 値,
キー: 値,
};
for(const 変数名 in オブジェクト名) {
console.log(変数名);
}
コードの例と解説
const user = {
name: "ぶたさん", // キー: 値
age: 25, // キー: 値
gender: "男性" // キー: 値
};
for (const key in user) {
console.log(key);
}
name
age
gender
const user = {};
「user」という名前の変数を作り、オブジェクト{}の中に「キー」と「値」を入れる。for (const key in user)
「user」の中にある「キー(name, age, gender)」を1つずつ取り出して、「key」という変数に入れる繰り返しを始める。console.log(key);
変数「key」の中身をコンソール画面に表示する。
【オブジェクトのコード】
const user = {
name: "ぶたさん", // キー: 値
age: 25, // キー: 値
gender: "男性" // キー: 値
};
コード | 種別 | 意味 |
---|---|---|
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
user |
オブジェクト名 | フォルダの名前 |
= |
代入演算子 | 右のものを左に入れる |
{} |
オブジェクト | フォルダ |
name: "ぶたさん" age: 25 gender: "男性" |
プロパティ | フォルダの中のファイル |
name age job |
キー | ファイルの名前 |
ぶたさん 25 男性 |
値 | ファイルの中のデータ |
"" |
囲い記号 | 囲まれたものを文字列として扱う |
, |
カンマ演算子 | 左から順に実行して最後だけ使う |
; |
区切り記号 | 文末につける記号 |
【for文のコード】
for (const key in user) {
console.log(key);
}
コード | 種別 | 意味 |
---|---|---|
for |
制御構文 | 指定した回数だけ処理をくり返す命令 |
() |
カッコ | for文の制御部分 |
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
key |
変数名 | 変数(箱)の名前 |
in |
演算子 | オブジェクトの中のキーを順番に取り出す |
user |
オブジェクト名 | フォルダの名前 |
{} |
ブロック スコープ |
{} 内にくり返したい処理を書く |
console.log() |
出力命令 | () の中身をコンソールに表示 |
値を取得

値
を取得する方法です。コードの書き方
const オブジェクト名 = {
キー: 値,
キー: 値,
キー: 値,
};
for(const 変数名 in オブジェクト名) {
console.log(オブジェクト名[変数名]);
}
コードの例と解説
const user = {
name: "ぶたさん", // キー: 値
age: 25, // キー: 値
gender: "男性" // キー: 値
};
for (const key in user) {
console.log(user[key]);
}
ぶたさん
25
男性
const user = {};
「user」という名前の変数を作り、オブジェクト{}の中に「キー」と「値」を入れる。for (const key in user)
「user」の中にある「キー(name, age, gender)」を1つずつ取り出して、「key」という変数に入れる繰り返しを始める。console.log(user[key]);
変数「key」の中にある値(user[key])をコンソール画面に表示する。
【オブジェクトのコード】
const user = {
name: "ぶたさん", // キー: 値
age: 25, // キー: 値
gender: "男性" // キー: 値
};
コード | 種別 | 意味 |
---|---|---|
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
user |
変数名 | 変数(箱)の名前 |
= |
代入演算子 | 右のものを左に入れる |
{} |
オブジェクト | 引き出し付きの箱 (複数のデータを1つにまとめたもの) |
name: "ぶたさん" age: 25 gender: "男性" |
プロパティ | 引き出しの名前(ラベル) |
name age job |
キー | 引き出し |
ぶたさん 25 男性 |
値 | 引き出しの中のデータ |
"" |
囲い記号 | 囲まれたものを文字列として扱う |
, |
カンマ演算子 | 左から順に実行して最後だけ使う |
; |
区切り記号 | 文末につける記号 |
【for文のコード】
for (const key in user) {
console.log(user[key]);
}
コード | 種別 | 意味 |
---|---|---|
for |
制御構文 | 指定した回数だけ処理をくり返す命令 |
() |
カッコ | for文の制御部分 |
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
key |
変数名 | 変数(箱)の名前 |
in |
演算子 | オブジェクトの中のキーを取り出す |
user |
変数 (オブジェクト) |
変数user の中にあるオブジェクト |
{} |
ブロック スコープ |
{} 内にくり返したい処理を書く |
console.log() |
出力命令 | () の中身をコンソールに表示 |
(user[key]) |
プレース ホルダ |
プロパティ(キー:値)の値にアクセス |
プロパティを取得

プロパティ
(キー+値)を取得する方法です。コードの書き方
const オブジェクト名 = {
キー1: 値1,
キー2: 値2,
キー3: 値3,
};
for (const 変数名 in オブジェクト名) {
console.log(`${変数名}: ${オブジェクト名[変数名]}`);
}
コードの例と解説
const user = {
name: "ぶたさん", // キー: 値
age: 25, // キー: 値
gender: "男性" // キー: 値
};
for (const key in user) {
console.log(`${key}: ${user[key]}`);
}
name: ぶたさん
age: 25
gender: 男性
const user = {};
「user」という名前の変数を作り、オブジェクト{}の中に「キー」と「値」を入れる。for (const key in user)
「user」の中にある「キー(name, age, gender)」を1つずつ取り出して、「key」という変数に入れる繰り返しを始める。console.log(key);
取り出した「キー(key)」と「値(user[key])」をコンソール画面に表示する。
コンソール画面に「キー: 値」の形で表示する。
【オブジェクトのコード】
const user = {
name: "ぶたさん", // キー: 値
age: 25, // キー: 値
gender: "男性" // キー: 値
};
コード | 種別 | 意味 |
---|---|---|
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
user |
変数名 | 変数(箱)の名前 |
= |
代入演算子 | 右のものを左に入れる |
{} |
オブジェクト | 引き出し付きの箱 (複数のデータを1つにまとめたもの) |
name: "ぶたさん" age: 25 gender: "男性" |
プロパティ | 引き出しの名前(ラベル) |
name age job |
キー | 引き出し |
ぶたさん 25 男性 |
値 | 引き出しの中のデータ |
"" |
囲い記号 | 囲まれたものを文字列として扱う |
, |
カンマ演算子 | 左から順に実行して最後だけ使う |
; |
区切り記号 | 文末につける記号 |
【for文のコード】
for (const key in user) {
console.log(`${key}: ${user[key]}`);
}
コード | 種別 | 意味 |
---|---|---|
for |
制御構文 | 指定した回数だけ処理をくり返す命令 |
() |
カッコ | for文の制御部分 |
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
key |
変数名 | 変数(箱)の名前 |
in |
演算子 | オブジェクトの中のキーを取り出す |
user |
変数 (オブジェクト) |
変数user の中にあるオブジェクト |
{} |
ブロック スコープ |
{} 内にくり返したい処理を書く |
console.log() |
出力命令 | () の中身をコンソールに表示 |
`` |
テンプレート リテラル記号 |
文字列の始まりと終わりを示す |
${key} |
プレース ホルダ |
key という変数の中身を入れる |
${user[key]} |
プレース ホルダ |
key という変数の中身にあるデータを入れる |
4. for…in文の書き方(応用編)
ここでは、JavaScriptの「for…in文」を応用した使い方をご紹介しています。
breakで処理を中断する

const user = {
name: "ぶたさん",
age: 25,
gender: "男性"
};
for (const key in user) {
if (key === "age") {
break; // 処理を止める
}
console.log(key);
}
name
const user = {};
「user」という名前の変数を作り、オブジェクト{}の中に「キー」と「値」を入れる。for (const key in user)
「user」の中にある「キー(name, age, gender)」を1つずつ取り出して、「key」という変数に入れる繰り返しを始める。if (key === "age") {break;}
もし「key」が「age」と同じになったら処理を中断する。console.log(key);
「key」の中身をコンソール画面に表示する。
ノーノちゃん
key
がage
と同じになったら処理を中断する」がよく分からないよ。key
の中にオブジェクトの中身(name
, age
, gender
)を放り込んでいくけど、もしage
が出てきたら中断するよ」ということです。ぶたさん
ネスト構造オブジェクトの中身を取得

const book = {
title: "吾輩は猫である",
author: "夏目漱石",
publisher: {
name: "東洋文庫",
year: 1905
}
};
for (const key in book) {
const value = book[key];
if (typeof value === "object") {
console.log(`▼ ${key}`);
for (const nestedKey in value) {
console.log(` ${nestedKey}: ${value[nestedKey]}`);
}
} else {
console.log(`${key}: ${value}`);
}
}
title: 吾輩は猫である
author: 夏目漱石
▼ publisher
name: 東洋文庫
year: 1905
const book = {};
「book」という名前の変数を作り、オブジェクト{}の中に「キー」と「値」を入れる。for (const key in book)
「book」の中にある「キー(name, age, gender)」を1つずつ取り出して、「key」という変数に入れる繰り返しを始める。const value = book[key];
「key」に対応する中身(値)を取り出して「value」に入れるif (typeof value === "object") {
console.log(`▼ ${key}`);
for (const nestedKey in value) {
console.log(` ${nestedKey}: ${value[nestedKey]}`);
}
「value」がオブジェクトなら見出し(たとえば▼publisher)を表示して、中の情報(nameやyear)を順番に表示する。else {console.log(`${key}: ${value}`);}
「title」や「author」のように、中がふつうの文字だったらそのまま表示
【オブジェクトのコード】
const book = {
title: "吾輩は猫である",
author: "夏目漱石",
publisher: {
name: "東洋文庫",
year: 1905
}
};
コード | 種別 | 意味 |
---|---|---|
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
book |
変数名 | 変数(箱)の名前 |
= |
代入演算子 | 右のものを左に入れる |
{} |
オブジェクト | 引き出し付きの箱 (複数のデータを1つにまとめたもの) |
title author publisher |
キー | 引き出し |
name year |
ネストキー | 引き出しの中の引き出し |
吾輩は猫である 夏目漱石 |
値 | 引き出しの中身 |
東洋文庫 1905 |
ネスト値 | 引き出しの中の引き出しの中身 |
"" |
囲い記号 | 囲まれたものを文字列として扱う |
, |
カンマ演算子 | 左から順に実行して最後だけ使う |
; |
区切り記号 | 文末につける記号 |
【for文のコード①】
for (const key in book) {
const value = book[key];
コード | 種別 | 意味 |
---|---|---|
for |
制御構文 | 指定した回数だけ処理をくり返す命令 |
(const key in book) |
for-in 構文 |
オブジェクトbook の中のキーを1つずつ変数key に入れる |
const |
変数宣言 キーワード |
変更できない変数(箱)を作る宣言 |
key |
変数名 | 変数(箱)の名前 |
value |
変数名 | 変数(箱)の名前 |
{} |
ブロック スコープ |
{} 内にくり返したい処理を書く |
book[key] |
プロパティ 参照 |
プロパティ(キー:値)の値を取り出す |
【for文のコード②】
if (typeof value === "object") {
console.log(`▼ ${key}`);
for (const nestedKey in value) {
console.log(` ${nestedKey}: ${value[nestedKey]}`);
}
} else {
console.log(`${key}: ${value}`);
}
}
コード | 種別 | 意味 |
---|---|---|
if |
条件分岐 | 「もし〇〇なら」の形で処理を分ける |
typeof |
演算子 | 変数の中身の型(数字か文字列かなど)を調べる |
=== |
厳密等価 演算子 |
左右の値が「型も値も同じ」かどうかを比較 |
"object" |
文字列 | ここでは比較対象となる文字列 |
console.log() |
出力命令 | () の中身をコンソールに表示 |
for (const nestedKey in value) |
for-in 構文 |
ネストされたオブジェクトの中身を1つずつ取り出す |
console.log() |
出力命令 | () の中身をコンソールに表示 |
`` |
テンプレート リテラル記号 |
文字列の始まりと終わりを示す |
${} |
プレース ホルダ |
{} 中に式や変数を埋め込む |
else{} |
制御構文 | ifの条件がfalse(いいえ)のときに実行する処理 |
5. for…in文の注意点
ここではfor…in文を使うときの注意点を解説しています。
取り出す順番が決まっていない

「for…in文」はオブジェクトの中にあるキーを1つずつ取り出して処理できますが、取り出す順番は決まっていません。
たとえば、次のようなコードがあったとします。
const obj = {
a: 1, // キー: 値
b: 2, // キー: 値
c: 3 // キー: 値
};
for (const key in obj) {
console.log(`${key}: ${obj[key]}`);
}
このコードを実行すると、オブジェクトのキーと値が順番通りに出力されると普通は思いますよね?
しかし、実際は下記のように順番がバラバラで出力されることがあります。
b: 2
a: 1
c: 3
基本的には順番通りに処理されますが、それが保証されているわけではありません。
そのため、順番が重要な場合にはfor…in文は使わないほうがよいでしょう。
ノーノちゃん
ぶたさん
配列には使わないほうがいい

const shopping = ["豚肉","白菜","ネギ"]
for(const food in shopping) {
console.log(shopping[food]);
}
豚肉
白菜
ネギ
上記のように「for…in文」でも配列の中のものを取り出すことはできますが、基本的にはおすすめしません。
なぜなら、以下のようなデメリットがあるからです。
- 取り出す順番が確実ではないため、順番がバラバラになる可能性がある
- 配列に追加された不要なプロパティまで取得してしまう可能性がある
このように、配列にfor…in文を使うとバグの原因になってしまうことがあるので、あまり使わないほうがいいでしょう。
ノーノちゃん
ぶたさん
構文・関数 | 配列におすすめ? | 備考 |
---|---|---|
for...in |
❌(非推奨) | 順番保証なし 余計なプロパティ取得の恐れ |
for...of |
✅(推奨) | 順番どおりに値を取り出せる 中断できる |
forEach |
✅(推奨) | 順番どおりに値を取り出せる 中断できない |

親オブジェクトが継承される時がある

JavaScriptのほとんどのオブジェクトは、「Object」という親オブジェクトからプロパティ(情報)を受け継いでいます。
そのため「for…in文」を使うと、自分で作ったオブジェクトだけでなく、親オブジェクトから継承したプロパティまで一緒に取り出してしまいます。
ですので「for…in文」は思わぬバグや誤動作の原因になることがあるので注意が必要です。
ノーノちゃん
Object.hasOwn()
を使えば継承された親オブジェクトの情報を除外できます。ぶたさん
const car = {
brand: "トヨタ",
model: "セルシオ",
year: 2010
};
for (const key in car) {
if (Object.hasOwn(car, key)) {
console.log(`${key}: ${car[key]}`);
}
}
brand: トヨタ
model: セルシオ
year: 2010
const user = {};
「car」という名前の変数を作り、オブジェクト{}の中に「キー」と「値」を入れる。for (const key in car)
「car」の中にある「キー(brand, model, year)」を1つずつ取り出して、「key」という変数に入れる繰り返しを始める。if (Object.hasOwn(car, key))
そのキーが自分で作ったオブジェクト「car」のプロパティかどうかをチェックする。console.log(`${key}: ${car[key]}`);
取り出したキー(key)と値(car[key])をコンソール画面に表示する。
Object.hasOwn()
は「そのプロパティが親から受け継いだものか、それとも自分で作ったオブジェクトのものか」を調べるためのメソッドです。6. よくある質問
ここでは、for…in文に関するよくある質問をご紹介しています。
for…of文との違い
for…in文とfor…of文の違いは次のようになります。
- for..in文
(オブジェクトの中身を取り出して処理したいときに使う) - for..of文
(配列の値を順番に取り出して処理したいときに使う)
このように、それぞれの構文は見た目は似ていますが、用途がまったく異なるので正しく使い分けましょう。

for…inは非推奨?
「for…in文」は非推奨ではありません。
これはオブジェクトの中にあるプロパティ(情報)を調べたり、取り出したりしたいときに便利な構文です。
ただし、使い方を間違えるとバグの原因になることがありますので、理解した上で使うことが重要です。
indexの値を使いたい
index(番号)の値を使いたい場合、下記のようにfor...of
文とentries()
を組み合わせる方法がおすすめです。
const fruits = ["りんご", "バナナ", "みかん"];
for (const [index, value] of fruits.entries()) {
console.log(`${index}: ${value}`);
}
0: りんご
1: バナナ
2: みかん
const fruits = ["りんご", "バナナ", "みかん"];
「fruits」という名前の配列を作り、その中に「りんご」「バナナ」「みかん」を入れる。for (const [index, value] of fruits.entries()) {
「car」の中にある「キー(brand, model, year)」を1つずつ取り出して、「key」という変数に入れる繰り返しを始める。if (Object.hasOwn(car, key))
「fruits.entries()」で配列の番号と値を1つずつ取り出して「index」と「value」という変数に入れる。console.log(`${index}: ${value}`);
変数「index」と「value」の中身をコンソール画面に表示する。
entries()
を使うと「いま配列の中の何番目のものか」を教えてくれるので非常に便利です。ぶたさん
7. まとめ
「for…in文」は、オブジェクトの中にあるプロパティを取り出して処理することができる構文です。
この構文は、取り出す順番が決まっていないため、オブジェクトのプロパティを1つずつ取り出して処理したいときに使います。
配列にも使うことができますが、取り出す順番がズレることがあるため、エラーの原因になる可能性があります。
そのため、配列の中のものを取り出す場合は「for…of文」や「forEach文」を使うことをおすすめします。
- for…in文はオブジェクトの中身を取得してひとつずつ処理するためのもの
- 取得する順番は決まっていないため、順番を
- 配列の中身を取得できるが問題があるので非推奨
- 親オブジェクトが継承されることがあるので注意しよう