オブジェクトの等価性の困惑
同一の特性を共有しているにもかかわらず、一見同一に見える 2 つのオブジェクトは、JavaScript では等価ではありません。以下のコード スニペットを考えると、この現象は多くの人を当惑させています。
var a = {}; var b = {}; console.log(a==b); //returns false console.log(a===b); //returns false
等価演算子について
通常 (==) と厳密 (===) 等価演算子の結果の違いは型変換にあります。通常の等価性では暗黙的な型変換が実行されますが、厳密な等価性では暗黙的な型変換は実行されません。ただし、この場合、両方の変数がオブジェクトであるため、型変換は無関係です。
Object Identity
オブジェクトの比較は、同じオブジェクト参照を比較する場合にのみ true と評価されます。使用される等価演算子に関係なく。つまり、a == a、a == b (b が a のエイリアスの場合)、a != c (c が別のオブジェクトの場合)。
Implications
この独特の動作はオブジェクト指向プログラミングに影響を与えます。同一のプロパティを持つが参照が異なる 2 つのオブジェクトは、同じ現実世界のエンティティを表している場合でも、等しくないとみなされます。
たとえば、データベースでは、同じ名前、住所、および同じ人物を表す 2 つのオブジェクトが存在します。電話番号はオブジェクト参照が異なるため、等しいとはみなされません。これにより、オブジェクト比較を実行するときに混乱を招く結果が生じる可能性があります。
ソリューション
2 つのオブジェクトのプロパティを比較する必要がある場合は、サードパーティのライブラリを使用するか、各プロパティを個別にチェックするカスタム比較関数。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3