Amazon 数量限定タイムセール開催中

【ES6】JavaScript:for…in文とは?書き方を解説!

【ES6】JavaScript:for...in文とは?書き方を解説!

このページでは、for…in文の基本的な書き方、使い方、そして注意点について、初心者にも分かりやすくていねいに解説しています。

「for…in文の書き方がよく分からない…」という方は参考にしてみてくださいね。

ノーノちゃん

for…in文は通常のfor文と書き方がまったく違うから混乱するよ。
最初は難しく感じるかと思いますが、for…in文はオブジェクトを扱うときにとても便利な構文なので、学んでおいて損はないですよ!

ぶたさん

1. JavaScriptのfor…in文とは?

JavaScriptのfor…in文とは?

まず、はじめに「for…in文」とは何をするための構文なのかくわしく解説します。

基本情報

構文名 for...in文
登場時期 ES1(1997年)
使える対象 ・オブジェクト
・配列
制御構文の使用 break:◯
continue:◯
return:◯
主な役割 オブジェクトのキーと値を順番に取り出して処理する
基本文法 for (const 変数名 in オブジェクト名)

オブジェクトの中身を取り出す

「for…in文」は、オブジェクトの中にある情報をひとつずつ取り出して処理してくれる構文です。

たとえば、次のようなときに使います。

for...in文の主な使いみち
  • オブジェクトの中に何があるか知りたいとき
    (どんなデータがあるのか表示したいとき)
  • すべての情報をまとめて表示や変更したいとき
    (ユーザー情報を一括で表示したり、値に「さん」を付け足したりする場合)
  • データを自動で処理するループを作りたいとき
    (人数分のユーザー、商品リストなど、大量データを一括で処理したい場合)
このように「for…in文」はオブジェクトの中身を効率よく扱いたいときにとても便利な構文です。

ぶたさん

オブジェクトについて

オブジェクト

オブジェクトとは、上記のように複数の情報をまとめて入れられるフォルダのようなものです。

たとえば「1人のユーザー情報」「1つの商品の情報」など、関連する情報をひとつにまとめたいときに使います。

オブジェクトを「フォルダ」と「ファイル」でたとえると次のような関係になります。

ぶたさん

名称 意味・イメージ
オブジェクト フォルダそのもの
オブジェクト名 フォルダの名前
プロパティ フォルダの中のファイル
キー ファイルの名前
ファイルの中に入っているデータ

2. オブジェクトの作り方

JavaScriptオブジェクトの作り方

それでは実際にオブジェクトを作ってみましょう。

基本的に作り方はとてもシンプルですので、初心者の方でもかんたんに作ることができます。

基本形

JavaScriptオブジェクト基本形
こちらはオブジェクトの基本的な作り方になります。
js
コピー 拡大
const オブジェクト名 = {
  キー: 値, 
  キー: 値,
  キー: 値,
};
js
コピー 拡大
const user = {
  name: "ぶたさん",
  age: 25,
  gender: "男性"
};
■ユーザー情報
ユーザー名:ぶたさん
年齢:25歳
性別:男性
js
コピー 拡大
const item = {
  name: "SEB-M705",
  brand: "ロジクール",
  price: 4190,
  category: "パソコン周辺機器(マウス)",
  stock: 5,
};
■商品情報
商品名:SEB-M705
メーカー:ロジクール
価格:4,190円
カテゴリ:パソコン周辺機器(マウス)
在庫:5
補足
  • オブジェクトの中は「キー: 値」のセットで書く
  • 値を省略したい場合は、変数と同じ名前のキーなら省略可能

応用形(ネスト構造)

JavaScriptオブジェクト応用形(ネスト構造)
こちらはネスト構造のオブジェクトを作成する方法です。
ネスト構造とは「入れ子(いれこ)になっている構造」のことです。

分かりやすくたとえると「フォルダの中にフォルダがあり、そのフォルダの中にまたフォルダがある」というような、階層的になっている状態です。

プログラムでは、オブジェクトの中にオブジェクト(または配列)が入っているような構造のことを、ネスト構造と呼びます。

js
コピー 拡大
const オブジェクト名 = {
  キー1: 値1,
  キー2: 値2,
  キー3: {
    ネストキー1: ネスト値1,
    ネストキー2: ネスト値2,
  },
};

こちらはオブジェクトの中にオブジェクトに入れた例です。

js
コピー 拡大
const book = {
  title: "吾輩は猫である",
  author: "夏目漱石",
  publisher: {
    name: "東洋文庫",
    year: 1905
  }
};
■シングル情報
タイトル:吾輩は猫である
作者:夏目漱石
出版社情報:
  出版社名:大倉書店
  発行年:1907年

こちらはオブジェクトの中にオブジェクト入れ、さらにその中にオブジェクトを入れた例です。

js
コピー 拡大
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

こちらはオブジェクトの中にオブジェクトと配列を入れた例です。

js
コピー 拡大
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文の書き方(基礎編)

for…in文の書き方

ここでは、JavaScriptの「for…in文」の基本的な書き方をご紹介しています。

キーを取得

for…in文でキーを取得
for…in文を使ってオブジェクトの中にあるキーを取得する方法です。

コードの書き方

js
コピー 拡大
const オブジェクト名 = {
  キー: 値, 
  キー: 値,
  キー: 値,
};

for(const 変数名 in オブジェクト名) {
  console.log(変数名);
}

コードの例と解説

js
コピー 拡大
const user = {
  name: "ぶたさん",  // キー: 値
  age: 25,          // キー: 値
  gender: "男性"    // キー: 値
};

for (const key in user) {
  console.log(key);
}
コンソール(実行結果)
コピー 拡大
name
age
gender
  1. const user = {};
    「user」という名前の変数を作り、オブジェクト{}の中に「キー」と「値」を入れる。
  2. for (const key in user)
    「user」の中にある「キー(name, age, gender)」を1つずつ取り出して、「key」という変数に入れる繰り返しを始める。
  3. console.log(key);
    変数「key」の中身をコンソール画面に表示する。

【オブジェクトのコード】

js
コピー 拡大
const user = {
  name: "ぶたさん", // キー: 値
  age: 25,         // キー: 値
  gender: "男性"   // キー: 値
};
コード 種別 意味
const 変数宣言
キーワード
変更できない変数(箱)を作る宣言
user オブジェクト名 フォルダの名前
= 代入演算子 右のものを左に入れる
{} オブジェクト フォルダ
name: "ぶたさん"
age: 25
gender: "男性"
プロパティ フォルダの中のファイル
name
age
job
キー ファイルの名前
ぶたさん
25
男性
ファイルの中のデータ
"" 囲い記号 囲まれたものを文字列として扱う
, カンマ演算子 左から順に実行して最後だけ使う
; 区切り記号 文末につける記号

【for文のコード】

js
コピー 拡大
for (const key in user) {
  console.log(key);
}
コード 種別 意味
for 制御構文 指定した回数だけ処理をくり返す命令
() カッコ for文の制御部分
const 変数宣言
キーワード
変更できない変数(箱)を作る宣言
key 変数名 変数(箱)の名前
in 演算子 オブジェクトの中のキーを順番に取り出す
user オブジェクト名 フォルダの名前
{} ブロック
スコープ
{}内にくり返したい処理を書く
console.log() 出力命令 ()の中身をコンソールに表示

値を取得

for…in文で値を取得
for…in文を使ってオブジェクトの中にあるを取得する方法です。

コードの書き方

js
コピー 拡大
const オブジェクト名 = {
  キー: 値, 
  キー: 値,
  キー: 値,
};

for(const 変数名 in オブジェクト名) {
  console.log(オブジェクト名[変数名]);
}

コードの例と解説

js
コピー 拡大
const user = {
  name: "ぶたさん", // キー: 値
  age: 25,         // キー: 値
  gender: "男性"   // キー: 値
};

for (const key in user) {
  console.log(user[key]);
}
コンソール(実行結果)
コピー 拡大
ぶたさん
25
男性
  1. const user = {};
    「user」という名前の変数を作り、オブジェクト{}の中に「キー」と「値」を入れる。
  2. for (const key in user)
    「user」の中にある「キー(name, age, gender)」を1つずつ取り出して、「key」という変数に入れる繰り返しを始める。
  3. console.log(user[key]);
    変数「key」の中にある値(user[key])をコンソール画面に表示する。

【オブジェクトのコード】

js
コピー 拡大
const user = {
  name: "ぶたさん", // キー: 値
  age: 25,         // キー: 値
  gender: "男性"   // キー: 値
};
コード 種別 意味
const 変数宣言
キーワード
変更できない変数(箱)を作る宣言
user 変数名 変数(箱)の名前
= 代入演算子 右のものを左に入れる
{} オブジェクト 引き出し付きの箱
(複数のデータを1つにまとめたもの)
name: "ぶたさん"
age: 25
gender: "男性"
プロパティ 引き出しの名前(ラベル)
name
age
job
キー 引き出し
ぶたさん
25
男性
引き出しの中のデータ
"" 囲い記号 囲まれたものを文字列として扱う
, カンマ演算子 左から順に実行して最後だけ使う
; 区切り記号 文末につける記号

【for文のコード】

js
コピー 拡大
for (const key in user) {
  console.log(user[key]);
}
コード 種別 意味
for 制御構文 指定した回数だけ処理をくり返す命令
() カッコ for文の制御部分
const 変数宣言
キーワード
変更できない変数(箱)を作る宣言
key 変数名 変数(箱)の名前
in 演算子 オブジェクトの中のキーを取り出す
user 変数
(オブジェクト)
変数userの中にあるオブジェクト
{} ブロック
スコープ
{}内にくり返したい処理を書く
console.log() 出力命令 ()の中身をコンソールに表示
(user[key]) プレース
ホルダ
プロパティ(キー:値)の値にアクセス

プロパティを取得

for…in文でプロパティ(キー+値)を取得
for…in文を使ってオブジェクトの中にあるプロパティ(キー+値)を取得する方法です。

コードの書き方

js
コピー 拡大
const オブジェクト名 = {
  キー1: 値1,
  キー2: 値2,
  キー3: 値3,
};

for (const 変数名 in オブジェクト名) {
  console.log(`${変数名}: ${オブジェクト名[変数名]}`);
}

コードの例と解説

js
コピー 拡大
const user = {
  name: "ぶたさん", // キー: 値
  age: 25,         // キー: 値
  gender: "男性"   // キー: 値
};

for (const key in user) {
  console.log(`${key}: ${user[key]}`);
}
コンソール(実行結果)
コピー 拡大
name: ぶたさん
age: 25
gender: 男性
  1. const user = {};
    「user」という名前の変数を作り、オブジェクト{}の中に「キー」と「値」を入れる。
  2. for (const key in user)
    「user」の中にある「キー(name, age, gender)」を1つずつ取り出して、「key」という変数に入れる繰り返しを始める。
  3. console.log(key);
    取り出した「キー(key)」と「値(user[key])」をコンソール画面に表示する。
    コンソール画面に「キー: 値」の形で表示する。

【オブジェクトのコード】

js
コピー 拡大
const user = {
  name: "ぶたさん", // キー: 値
  age: 25,         // キー: 値
  gender: "男性"   // キー: 値
};
コード 種別 意味
const 変数宣言
キーワード
変更できない変数(箱)を作る宣言
user 変数名 変数(箱)の名前
= 代入演算子 右のものを左に入れる
{} オブジェクト 引き出し付きの箱
(複数のデータを1つにまとめたもの)
name: "ぶたさん"
age: 25
gender: "男性"
プロパティ 引き出しの名前(ラベル)
name
age
job
キー 引き出し
ぶたさん
25
男性
引き出しの中のデータ
"" 囲い記号 囲まれたものを文字列として扱う
, カンマ演算子 左から順に実行して最後だけ使う
; 区切り記号 文末につける記号

【for文のコード】

js
コピー 拡大
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文の書き方(応用編)

for…in文の書き方(応用編)

ここでは、JavaScriptの「for…in文」を応用した使い方をご紹介しています。

breakで処理を中断する

breakで処理を中断する
break文を使ってfor…in文を途中で中断する方法です。
js
コピー 拡大
const user = {
  name: "ぶたさん",
  age: 25,
  gender: "男性"
};

for (const key in user) {
  if (key === "age") {
    break; // 処理を止める
  }
  console.log(key); 
}
コンソール(実行結果)
コピー 拡大
name
  1. const user = {};
    「user」という名前の変数を作り、オブジェクト{}の中に「キー」と「値」を入れる。
  2. for (const key in user)
    「user」の中にある「キー(name, age, gender)」を1つずつ取り出して、「key」という変数に入れる繰り返しを始める。
  3. if (key === "age") {break;}
    もし「key」が「age」と同じになったら処理を中断する。
  4. console.log(key);
    「key」の中身をコンソール画面に表示する。

ノーノちゃん

3項目の「もしkeyageと同じになったら処理を中断する」がよく分からないよ。
keyの中にオブジェクトの中身(name, age, gender)を放り込んでいくけど、もしageが出てきたら中断するよ」ということです。

ぶたさん

ネスト構造オブジェクトの中身を取得

for..in文でネスト構造オブジェクトの中身を取得
for…in文を使ってネスト構造のオブジェクトの中身を取得する方法です。
js
コピー 拡大
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
  1. const book = {};
    「book」という名前の変数を作り、オブジェクト{}の中に「キー」と「値」を入れる。
  2. for (const key in book)
    「book」の中にある「キー(name, age, gender)」を1つずつ取り出して、「key」という変数に入れる繰り返しを始める。
  3. const value = book[key];
    「key」に対応する中身(値)を取り出して「value」に入れる
  4. if (typeof value === "object") {
    console.log(`▼ ${key}`);
    for (const nestedKey in value) {
    console.log(` ${nestedKey}: ${value[nestedKey]}`);
    }

    「value」がオブジェクトなら見出し(たとえば▼publisher)を表示して、中の情報(nameやyear)を順番に表示する。
  5. else {console.log(`${key}: ${value}`);}
    「title」や「author」のように、中がふつうの文字だったらそのまま表示

【オブジェクトのコード】

js
コピー 拡大
const book = {
  title: "吾輩は猫である",
  author: "夏目漱石",
  publisher: {
    name: "東洋文庫",
    year: 1905
  }
};
コード 種別 意味
const 変数宣言
キーワード
変更できない変数(箱)を作る宣言
book 変数名 変数(箱)の名前
= 代入演算子 右のものを左に入れる
{} オブジェクト 引き出し付きの箱
(複数のデータを1つにまとめたもの)
title
author
publisher
キー 引き出し
name
year
ネストキー 引き出しの中の引き出し
吾輩は猫である
夏目漱石
引き出しの中身
東洋文庫
1905
ネスト値 引き出しの中の引き出しの中身
"" 囲い記号 囲まれたものを文字列として扱う
, カンマ演算子 左から順に実行して最後だけ使う
; 区切り記号 文末につける記号

【for文のコード①】

js
コピー 拡大
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文のコード②】

js
コピー 拡大
  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文を使うときの注意点を解説しています。

取り出す順番が決まっていない

for…in文の注意点:取り出す順番が決まっていない
for…in文の注意点:取り出す順番が決まっていない

「for…in文」はオブジェクトの中にあるキーを1つずつ取り出して処理できますが、取り出す順番は決まっていません。

たとえば、次のようなコードがあったとします。

js
コピー 拡大
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文は使わないほうがよいでしょう。

ノーノちゃん

順番が大事な場合はどうすればいいの?
その場合は「配列」を作ってfor…of文を使うと順番通りに取り出すことができます。

ぶたさん

配列には使わないほうがいい

for…in文の注意点:配列には使わないほうがいい
for…in文の注意点:配列には使わないほうがいい
js
コピー 拡大
const shopping = ["豚肉","白菜","ネギ"]

for(const food in shopping) {
  console.log(shopping[food]);
}
コンソール(実行結果)
コピー 拡大
豚肉
白菜
ネギ

上記のように「for…in文」でも配列の中のものを取り出すことはできますが、基本的にはおすすめしません。

なぜなら、以下のようなデメリットがあるからです。

配列で「for...in文」を使うデメリット
  • 取り出す順番が確実ではないため、順番がバラバラになる可能性がある
  • 配列に追加された不要なプロパティまで取得してしまう可能性がある

このように、配列にfor…in文を使うとバグの原因になってしまうことがあるので、あまり使わないほうがいいでしょう。

ノーノちゃん

配列を処理したいときは「for…in文」を使わないほうがいいってこと?
そうですね。配列の処理は「for…of文」か「forEach文」を使ったほうが安全です。

ぶたさん

構文・関数 配列におすすめ? 備考
for...in ❌(非推奨) 順番保証なし
余計なプロパティ取得の恐れ
for...of ✅(推奨) 順番どおりに値を取り出せる
中断できる
forEach ✅(推奨) 順番どおりに値を取り出せる
中断できない
for文の種類についてはくわしく知りたい方はこちら
【ES6】JavaScript:for文の書き方【ES6】JavaScript:for文の書き方

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

for…in文の注意点:親オブジェクトが継承される時がある
for…in文の注意点:親オブジェクトが継承される時がある

JavaScriptのほとんどのオブジェクトは、「Object」という親オブジェクトからプロパティ(情報)を受け継いでいます。

そのため「for…in文」を使うと、自分で作ったオブジェクトだけでなく、親オブジェクトから継承したプロパティまで一緒に取り出してしまいます。

ですので「for…in文」は思わぬバグや誤動作の原因になることがあるので注意が必要です。

ノーノちゃん

親オブジェクトの情報を継承しないようにするにはどうすればいいの?
Object.hasOwn()を使えば継承された親オブジェクトの情報を除外できます。

ぶたさん

js
コピー 拡大
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
  1. const user = {};
    「car」という名前の変数を作り、オブジェクト{}の中に「キー」と「値」を入れる。
  2. for (const key in car)
    「car」の中にある「キー(brand, model, year)」を1つずつ取り出して、「key」という変数に入れる繰り返しを始める。
  3. if (Object.hasOwn(car, key))
    そのキーが自分で作ったオブジェクト「car」のプロパティかどうかをチェックする。
  4. console.log(`${key}: ${car[key]}`);
    取り出したキー(key)と値(car[key])をコンソール画面に表示する。
Object.hasOwn()とは?
Object.hasOwn()は「そのプロパティが親から受け継いだものか、それとも自分で作ったオブジェクトのものか」を調べるためのメソッドです。

6. よくある質問

for…in文に関するよくある質問

ここでは、for…in文に関するよくある質問をご紹介しています。

for…of文との違い

for…in文とfor…of文の違いは次のようになります。

  • for..in文
    (オブジェクトの中身を取り出して処理したいときに使う)
  • for..of文
    (配列の値を順番に取り出して処理したいときに使う)

このように、それぞれの構文は見た目は似ていますが、用途がまったく異なるので正しく使い分けましょう。

for…of文についてはこちらのページで詳しく解説しています。
【ES6】JavaScript:for…of文とは?使えないときの対処法【ES6】JavaScript:for…of文とは?使えないときの対処法

for…inは非推奨?

「for…in文」は非推奨ではありません。

これはオブジェクトの中にあるプロパティ(情報)を調べたり、取り出したりしたいときに便利な構文です。

ただし、使い方を間違えるとバグの原因になることがありますので、理解した上で使うことが重要です。

indexの値を使いたい

index(番号)の値を使いたい場合、下記のようにfor...of文とentries()を組み合わせる方法がおすすめです。

js
コピー 拡大
const fruits = ["りんご", "バナナ", "みかん"];

for (const [index, value] of fruits.entries()) {
  console.log(`${index}: ${value}`);
}
コンソール(実行結果)
コピー 拡大
0: りんご  
1: バナナ  
2: みかん
  1. const fruits = ["りんご", "バナナ", "みかん"];
    「fruits」という名前の配列を作り、その中に「りんご」「バナナ」「みかん」を入れる。
  2. for (const [index, value] of fruits.entries()) {
    「car」の中にある「キー(brand, model, year)」を1つずつ取り出して、「key」という変数に入れる繰り返しを始める。
  3. if (Object.hasOwn(car, key))
    「fruits.entries()」で配列の番号と値を1つずつ取り出して「index」と「value」という変数に入れる。
  4. console.log(`${index}: ${value}`);
    変数「index」と「value」の中身をコンソール画面に表示する。
このようにentries()を使うと「いま配列の中の何番目のものか」を教えてくれるので非常に便利です。

ぶたさん

7. まとめ

JavaScript:for…in文まとめ

「for…in文」は、オブジェクトの中にあるプロパティを取り出して処理することができる構文です。

この構文は、取り出す順番が決まっていないため、オブジェクトのプロパティを1つずつ取り出して処理したいときに使います。

配列にも使うことができますが、取り出す順番がズレることがあるため、エラーの原因になる可能性があります。

そのため、配列の中のものを取り出す場合は「for…of文」や「forEach文」を使うことをおすすめします。

まとめ
  • for…in文はオブジェクトの中身を取得してひとつずつ処理するためのもの
  • 取得する順番は決まっていないため、順番を
  • 配列の中身を取得できるが問題があるので非推奨
  • 親オブジェクトが継承されることがあるので注意しよう