Wie testen, ob zwei Objekte mit JavaScript identisch sind?

8

Ich brauche eine Funktion:

%Vor%

Wenn a und b identisch sind, wird true zurückgegeben.
Ich habe return a === b ausprobiert, aber ich habe festgestellt, dass [] === [] den Wert false zurückgibt.
Einige Ergebnisse, die ich von dieser Funktion erwarte, können gegeben werden:

%Vor%     
wong2 14.07.2011, 06:28
quelle

5 Antworten

4

Es gibt einige Beispiele, die nach Schema auf Crockfords Website angepasst wurden. Genauer gesagt, check out:

%Vor%

Es kann alles hier gefunden werden:

Ссылка

Hier ist ein Arbeitsbeispiel:

Ссылка

Aktualisierung:

Habe gerade einige Testfälle auf Basis des OP geschrieben. Es stellte sich heraus, dass ich die Sub1-Funktion modifizieren musste, um & lt; = 0 not ==0 0 zu prüfen, ansonsten hat iseQual (3.14, 3.14) den Stack durchgebrannt. Außerdem funktioniert isEqual nicht für den Objektvergleich, Sie sind also alleine dort. Wenn Sie jedoch den Beispielen auf der Site von Crockford folgen, werden Sie sehen, wie einfach und unterhaltsam rekursive Methoden geschrieben werden können, um die Objektgleichheit zu überprüfen.

    
Adam 14.07.2011, 06:41
quelle
12

Sie können Underscore.js einbetten und _.isEqual(obj1, obj2) . Die Funktion arbeitet für beliebige Objekte und verwendet die effizienteste Möglichkeit, die gegebenen Objekte auf Gleichheit zu testen.

    
ThiefMaster 14.07.2011 07:13
quelle
4

Der beste Weg, dies zu tun, ist einen JSON-Serializer zu verwenden. Serialisieren Sie beides, um die Zeichenfolge zu string und zu vergleichen.

    
TheBrain 14.07.2011 06:45
quelle
0

Hier ist etwas, das funktionieren kann:

%Vor%

Da es Funktionen in Strings umwandelt, um sie zu vergleichen, sollten Sie nach Leerzeichen suchen, da dies zu Problemen führen kann:

%Vor%

Sie können Ссылка ausprobieren, um es selbst zu testen.

    
Ankit 14.07.2011 11:07
quelle
0

Wenn jemand, der diese Antwort liest, Angular.js verwendet, können Sie angular.equals(obj1,obj2);

verwenden

Laut den Dokumenten :

  

Bestimmt, ob zwei Objekte oder zwei Werte äquivalent sind. Unterstützt den Wert   Typen, reguläre Ausdrücke, Arrays und Objekte.   Zwei Objekte oder Werte werden als gleichwertig betrachtet, wenn mindestens eines der   Folgendes ist wahr:

     
  • Beide Objekte oder Werte übergeben === comparison.
  •   
  • Beide Objekte oder Werte sind vom gleichen Typ und alle ihre Eigenschaften sind gleich, indem sie mit angular.equals verglichen werden.
  •   
  • Beide Werte sind NaN . (In JavaScript, NaN == NaN => false . Aber wir betrachten zwei NaN als gleich).
  •   
  • Beide Werte stellen den gleichen regulären Ausdruck dar (In JavaScript, /abc/ == /abc/ => false . Wir betrachten jedoch zwei reguläre Ausdrücke als   gleich, wenn ihre Textdarstellung übereinstimmt.)
  •   
  • Bei einem Eigenschaftsvergleich werden Eigenschaften des Funktionstyps und Eigenschaften mit Namen, die mit $ beginnen, ignoriert.
  •   

Scope- und DOMWindow-Objekte werden nur anhand von (===) verglichen.

    
Jayant Bhawal 08.02.2016 11:58
quelle

Tags und Links