オブジェクトの等価性を理解する: 2 つの同一のオブジェクトが等しくない理由
プログラミングでは、同一のオブジェクトを表す 2 つの変数は等しくないものと仮定するのが直感的です。平等とみなされます。ただし、JavaScript では、等価演算子 (==) または厳密等価演算子 (===) を使用して 2 つのオブジェクトを比較すると、多くの場合、驚くべき結果が得られます。
謎: 等価でない同一オブジェクト
次のコードを考えてみましょう:
var a = {}; var b = {}; console.log(a == b); //returns false console.log(a === b); //returns false
期待どおり true を返すのではなく、両方とも比較は false を返します。この動作は、一見同一に見える 2 つのオブジェクトが等しいと期待する開発者を混乱させます。
説明: オブジェクト比較のセマンティクス
この動作を理解する鍵は、JavaScript の比較方法にあります。オブジェクト。数値や文字列のようなプリミティブなデータ型とは異なり、オブジェクトには独自の一意の ID または参照があります。 2 つのオブジェクトを比較する場合、等価演算子はそれらが全く同じオブジェクトを参照しているかどうかをチェックします。
ID と値
上の例では、 a と b は、同じ構造とプロパティを持っていますが、2 つの異なるオブジェクトです。各オブジェクトには独自の一意の参照があり、等価演算子はオブジェクトの値ではなくこの参照を評価します。
オブジェクト比較の影響
この動作は、次のオブジェクトに対して重大な影響を及ぼします。オブジェクトの比較。 2 つのオブジェクトが等しいのは、それらがまったく同じオブジェクトを参照している場合のみです。あるオブジェクトを別のオブジェクトに割り当てると、同じオブジェクトへの新しい参照が作成されるだけです。
回避策: オブジェクト プロパティの比較
2 つのオブジェクトのプロパティの同等性を比較する必要がある場合回避策の 1 つは、JSON.stringify() メソッドを使用してオブジェクトを JSON 文字列に変換し、結果の文字列を比較することです。あるいは、ヘルパー関数またはライブラリを使用して、オブジェクトのプロパティを再帰的に比較することもできます。
以上が2 つの同一の JavaScript オブジェクトが同等とみなされないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。