Einführung
In diesem Lab werden wir das Konzept der Objektgleichheit in JavaScript erkunden. Wir werden lernen, wie man einen tiefen Vergleich zwischen zwei Werten durchführt, um zu bestimmen, ob sie gleichwertig sind, indem verschiedene Techniken verwendet werden, wie das Überprüfen, ob die Werte identisch sind, das Überprüfen, ob es sich um nicht-Objektwerte mit einem gleichwertigen Wert handelt, und das Verwenden von Object.keys(), um zu überprüfen, ob beide Werte die gleiche Anzahl von Schlüsseln haben. Wir werden auch verstehen, wie man Rekursion verwendet, um geschachtelte Objekte zu vergleichen.
Wie man in JavaScript die Objektgleichheit überprüft
Um zu überprüfen, ob zwei Werte gleichwertig sind, folgen Sie diesen Schritten:
- Öffnen Sie das Terminal/SSH und geben Sie
nodeein, um mit der Codeausführung zu beginnen. - Führen Sie einen tiefen Vergleich zwischen den beiden Werten mit der
equals()-Funktion durch. - Überprüfen Sie, ob die beiden Werte identisch sind. Wenn ja, geben Sie
truezurück. - Überprüfen Sie, ob beide Werte
Date-Objekte mit der gleichen Zeit sind, indem SieDate.prototype.getTime()verwenden. Wenn ja, geben Sietruezurück. - Überprüfen Sie, ob beide Werte nicht-Objektwerte mit einem gleichwertigen Wert sind (strenger Vergleich). Wenn ja, geben Sie
truezurück. - Überprüfen Sie, ob nur ein Wert
nulloderundefinedist oder ob ihre Prototypen unterschiedlich sind. Wenn ja, geben Siefalsezurück. - Wenn keine der obigen Bedingungen zutrifft, verwenden Sie
Object.keys(), um zu überprüfen, ob beide Werte die gleiche Anzahl von Schlüsseln haben. - Verwenden Sie
Array.prototype.every(), um zu überprüfen, ob jeder Schlüssel inainbexistiert und ob sie rekursiv durch Aufruf vonequals()gleichwertig sind.
Verwenden Sie den folgenden Code, um die equals()-Funktion zu implementieren:
const equals = (a, b) => {
if (a === b) return true;
if (a instanceof Date && b instanceof Date)
return a.getTime() === b.getTime();
if (!a || !b || (typeof a !== "object" && typeof b !== "object"))
return a === b;
if (a.prototype !== b.prototype) return false;
const keys = Object.keys(a);
if (keys.length !== Object.keys(b).length) return false;
return keys.every((k) => equals(a[k], b[k]));
};
Verwenden Sie die folgenden Codebeispiele, um die equals()-Funktion zu testen:
equals(
{ a: [2, { e: 3 }], b: [4], c: "foo" },
{ a: [2, { e: 3 }], b: [4], c: "foo" }
); // true
equals([1, 2, 3], { 0: 1, 1: 2, 2: 3 }); // true
Zusammenfassung
Herzlichen Glückwunsch! Sie haben das Lab "Überprüfen der Objektgleichheit" abgeschlossen. Sie können in LabEx weitere Labs absolvieren, um Ihre Fähigkeiten zu verbessern.