Die Verwirrung der Objektgleichheit
Obwohl sie identische Eigenschaften aufweisen, bleiben zwei scheinbar identische Objekte in JavaScript ungleich. Dieses Phänomen hat angesichts des folgenden Codeausschnitts viele verwirrt:
var a = {}; var b = {}; console.log(a==b); //returns false console.log(a===b); //returns false
Gleichheitsoperatoren verstehen
Die Ungleichheit zwischen den Ergebnissen der regulären (==) und strengen (===) Gleichheitsoperatoren liegt in der Typkonvertierung . Bei regulärer Gleichheit wird eine implizite Typkonvertierung durchgeführt, bei strikter Gleichheit jedoch nicht. In diesem Fall sind jedoch beide Variablen Objekte, sodass die Typkonvertierung irrelevant ist.
Objektidentität
Objektvergleiche werden nur dann als wahr ausgewertet, wenn dieselbe Objektreferenz verglichen wird. unabhängig vom verwendeten Gleichheitsoperator. Mit anderen Worten, a == a, a == b (wenn b ein Alias von a ist), aber a != c (wenn c ein anderes Objekt ist).
Implikationen
Dieses einzigartige Verhalten hat Auswirkungen auf die objektorientierte Programmierung. Zwei Objekte mit identischen Eigenschaften, aber unterschiedlichen Referenzen gelten als ungleich, auch wenn sie dieselbe reale Entität darstellen.
In einer Datenbank beispielsweise repräsentieren zwei Objekte dieselbe Person mit demselben Namen, derselben Adresse usw Telefonnummern würden nicht als gleich angesehen, da sie unterschiedliche Objektreferenzen haben. Dies kann zu verwirrenden Ergebnissen beim Durchführen von Objektvergleichen führen.
Lösungen
Wenn ein Vergleich der Eigenschaften zweier Objekte erforderlich ist, sollten Sie die Verwendung einer Bibliothek eines Drittanbieters in Betracht ziehen oder eine implementieren benutzerdefinierte Vergleichsfunktion, die jede Eigenschaft einzeln prüft.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3