カテゴリ: JavaScript 更新日: 2025/08/24

JavaScriptのオブジェクトを比較する方法を完全ガイド!深い比較と浅い比較の違いを理解しよう

JavaScriptのオブジェクトを比較する方法(深い比較・浅い比較の違い)
JavaScriptのオブジェクトを比較する方法(深い比較・浅い比較の違い)

先生と生徒の会話形式で理解しよう

生徒

「JavaScriptでオブジェクト同士が同じかどうかを確認するには、どうしたらいいですか?」

先生

「JavaScriptでは、オブジェクトを比較する方法にいくつかの種類があります。浅い比較と深い比較という考え方があります。」

生徒

「浅いとか深いってどういう意味なんですか?」

先生

「それでは、浅い比較と深い比較の違いについて、具体的な例を交えて説明していきましょう。」

1. JavaScriptのオブジェクトとは?

1. JavaScriptのオブジェクトとは?
1. JavaScriptのオブジェクトとは?

まず最初に、JavaScriptの「オブジェクト」について簡単におさらいしましょう。オブジェクトとは、データをキーと値のセットで管理するための仕組みです。人間で言えば「名前=山田、年齢=30歳」といった情報をひとまとめにできます。

2. オブジェクトの浅い比較とは?

2. オブジェクトの浅い比較とは?
2. オブジェクトの浅い比較とは?

浅い比較とは、オブジェクトの参照(ポインタ)が同じかどうかを確認する方法です。中身のデータが同じでも、別々に作ったオブジェクトは"違う"と判断されます。

下記は浅い比較の例です。


const obj1 = { name: "Taro" };
const obj2 = { name: "Taro" };

console.log(obj1 === obj2); // false

const obj3 = obj1;
console.log(obj1 === obj3); // true

1つ目の比較では、中身が同じでも、obj1とobj2は別々のオブジェクトなので「false」になります。2つ目の比較では、obj3はobj1と同じ場所を指しているので「true」になります。

3. オブジェクトの深い比較とは?

3. オブジェクトの深い比較とは?
3. オブジェクトの深い比較とは?

深い比較とは、オブジェクトの中身の値がすべて同じかどうかをチェックする方法です。JavaScriptには標準でこの機能はないため、自分で関数を書くか、ライブラリを使います。

以下は、簡単な深い比較関数の例です。


function isEqual(a, b) {
  const aKeys = Object.keys(a);
  const bKeys = Object.keys(b);

  if (aKeys.length !== bKeys.length) return false;

  for (let key of aKeys) {
    if (a[key] !== b[key]) return false;
  }

  return true;
}

const obj1 = { name: "Taro", age: 20 };
const obj2 = { name: "Taro", age: 20 };

console.log(isEqual(obj1, obj2)); // true

この関数は、キーの数と値を1つずつ比べて同じかどうかを判定します。深い比較を行いたいときにはこのような方法が必要になります。

4. JSON.stringifyを使った簡易的な深い比較

4. JSON.stringifyを使った簡易的な深い比較
4. JSON.stringifyを使った簡易的な深い比較

簡単に深い比較を行いたいときは、JSON.stringify()を使う方法もあります。オブジェクトを文字列に変換して、それを比較するのです。


const obj1 = { name: "Taro", age: 20 };
const obj2 = { name: "Taro", age: 20 };

console.log(JSON.stringify(obj1) === JSON.stringify(obj2)); // true

この方法は手軽ですが、キーの順番が違う場合はfalseになりますので、注意が必要です。

5. オブジェクトの比較を使う場面とは?

5. オブジェクトの比較を使う場面とは?
5. オブジェクトの比較を使う場面とは?

オブジェクトの比較は、次のような場面でよく使われます。

  • 画面に表示する情報が変わったか確認するとき
  • フォームの入力内容が変更されたかをチェックしたいとき
  • ゲームやアプリの状態を監視したいとき

初心者の方は、まずは「浅い比較は同じ場所を見ているか」「深い比較は中身まで見る」という考え方をしっかり覚えておくとよいでしょう。

関連記事:
カテゴリの一覧へ
新着記事
New1
JavaScript
JavaScriptの正規表現で繰り返し指定(* + ? {n,m})を学ぼう
New2
TypeScript
TypeScriptとESNextの連携を完全ガイド!最新機能を使いこなす設定と対応法
New3
JavaScript
JavaScriptの正規表現で任意の1文字(.)や文字クラスを使う方法
New4
TypeScript
TypeScriptで非同期イテレーター(for await of)を活用する
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptの日時操作Tips!実務で役立つテクニック集
No.3
Java&Spring記事人気No3
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.4
Java&Spring記事人気No4
TypeScript
TypeScriptでESLintとPrettierを導入!コード整形ルールを自動で統一する方法
No.5
Java&Spring記事人気No5
TypeScript
TypeScriptのif文の使い方を完全ガイド!初心者でもわかる条件分岐
No.6
Java&Spring記事人気No6
TypeScript
TypeScriptでコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】
No.7
Java&Spring記事人気No7
JavaScript
JavaScriptの配列の要素にアクセスする方法(インデックス番号の使い方)
No.8
Java&Spring記事人気No8
JavaScript
JavaScriptの正規表現で文字列を置換する方法(replaceメソッド)