Die Funktion "deepEqual" soll 2 Werte aufnehmen, um zu sehen, ob sie genau gleich sind. Die Ergebnisse für den ersten und zweiten Test kommen wie erwartet zurück. Ist vielleicht etwas nicht in Ordnung mit der Art, wie ich den rekursiven Aufruf einbeziehe?Javascript Vergleichswert im Objekt
function deepEqual(obj1, obj2) {
if (typeof obj1 == 'object' && typeof obj1 !== null && typeof obj2 == 'object' && typeof obj2 !== null) {
if (obj1.length != obj2.length) {return false;}
for (var prop in obj1) {
if (typeof obj1[prop] == 'object') {deepEqual(obj1[prop], obj2[prop]);}
if (obj1[prop] != obj2[prop]) {return false;}
}
return true;
} else if (obj1 === obj2) {return true;}
else {return false;}
}
var obj = {here: {is: "an"}, object: 2};
console.log(deepEqual(obj, obj));
// → true -> true
console.log(deepEqual(obj, {here: 1, object: 2}));
// → false -> false
console.log(deepEqual(obj, {here: {is: "an"}, object: 2}));
// → true -> false
Warum nicht verwenden == =? – SPlatten
@SPlatten Es funktioniert nicht für Objekte. Es testet nur auf Referenzgleichheit. – 4castle
@SPlatten: Das OP versucht eindeutig, auf Äquivalenz, nicht auf Identität zu testen. –