checking)がtrueになるケースは以下の通りです。上記の『プロパティが一致』の定義は以下の通りです。プロパティがプリミティブ型の場合、スカラ値が同じであるプロパティがオブジェクト型の場合、オブジェクトの参照先が同じであるプリミティブ型とは整数や理論値、文字列といったスカラ値を持つものです。オブジェクト型とはObjectやArrayといったものです。浅い比較の具体例についてオブジェクトの参照先が同じ場合オブジェクトの参照先が同じ、つまり互いの変更が影響を及ぼし合う関係のオブジェクトどうしは浅い比較においてtrueです。以下は参照先が同じオブジェクトの浅い比較結果の例です。浅い比較ではまずオブジェクトの参照先の一致を確認しますが、参照先が異なる場合でも浅い比較においてtrueになるケースがあります。以下では参照先が異なるオブジェクトを浅い比較する際のパターンについて紹介します。ネスト構造を持たないオブジェクトの場合ネスト構造を持たない、つまりオブジェクトのプロパティがすべてプリミティブ型で構成されている場合はスカラ値が一致しているかを検証します。すべてのプロパティのスカラ値が一致していれば浅い比較においてtrueです。true浅いコピーの場合も、すべてのプロパティが一致していれば浅い比較においてtrueになります。true浅いコピーの詳細解説はJavaScriptの浅い比較・浅い(深い)コピーの挙動まとめで紹介しています。ネスト構造のオブジェクトの場合オブジェクトのプロパティがオブジェクト型の場合、参照先が同じであればそのプロパティは一致していると解釈されます。以下はオブジェクトの見た目は一致していますが、オブジェクト型のプロパティの参照先が異なるため浅い比較においてfalseになる例です。false浅い比較でtrueになるネスト構造のオブジェクトの例は以下の通りです。trueさいごに「浅い比較の関心はオブジェクトの参照先のみ」と思っている方も多いですが、オブジェクトの参照先が異なる場合でも浅い比較においてtrueになるケースがあるので覚えておくとよいでしょう。浅い比較を検証するライブラリはいくつかあるのでロジックの詳細はライブラリのコードで確認するとよいでしょう。fbjs/packages/fbjs/src/core/shallowEqual.jsやreact-redux/src/utils/shallowEqual.tsなどが参考になります。Twitter(@nishina555)やってます。reactfbjs/packages/fbjs/src/core/shallowEqual.jsreact-redux/src/utils/shallowEqual.tsRECOMMENDJavaScriptReactツイートシェアはてブ1送るPocketプロフィールnishina大企業、ベンチャーと色々なところでWebエンジニアやっています。退職手続きから案件参画まで。人気の記事iPhoneの連絡先の保存がうまくできない!?原因は同期設定かも。