![Vergleichsoperation in Javascript](/equal.webp)
illustrated by adobe firefly
Vergleichsoperation in Javascript
#javascript#deutsch
Vergleichsoperatoren sind die mit am häufigsten verwendeten Bestandteile von Programmiersprachen. Sind zwei Variablen gleich sollen bestimmte Operationen ausgeführt werden. Es können Zahlen (Integer) binäre Zustände (bool) oder Texte ( String) miteinander verglichen werden. Üblicherweise wird der Operator == genutzt.
Aber wie funktioniert das Javascript, wo nicht explizit zwischen Variablentypen unterschieden wird?
In JavaScript ist ”==” der sogenannte “lose” Gleichheitsoperator, der den Wertvergleich ohne Berücksichtigung des Datentyps durchführt. Zum Beispiel wird 1 == '1'
als true
ausgewertet, da die Werte gleich sind, auch wenn die Datentypen unterschiedlich sind.
Auf der anderen Seite ist ”===” der “strikte” Gleichheitsoperator, der sowohl den Wert als auch den Datentyp vergleicht. Bei 1 === '1'
wird das als false
ausgewertet, da die Werte gleich sind, aber die Datentypen unterschiedlich sind (Zahl vs. Zeichenkette).
Generell wird empfohlen, den “strikten” Gleichheitsoperator ===
zu verwenden, um unerwartete Verhaltensweisen aufgrund von Typumwandlungen zu vermeiden.
Um zwei Objekte in JavaScript zu vergleichen, die den gleichen Inhalt haben, kannst du den sogenannten “deep” Vergleich verwenden. Dabei werden nicht nur die Referenzen auf die Objekte verglichen, sondern auch die Werte in den verschachtelten Strukturen.
Es gibt verschiedene Möglichkeiten, dies zu erreichen. Eine einfache Möglichkeit ist die Verwendung von Bibliotheken wie Lodash mit seiner Funktion _.isEqual(obj1, obj2)
. Beispiel:
const _ = require('lodash');
const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
if (_.isEqual(obj1, obj2)) {
console.log('Die Objekte haben den gleichen Inhalt.');
} else {
console.log('Die Objekte haben unterschiedlichen Inhalt.');
}
Alternativ kannst du auch eine eigene Funktion schreiben, die den tiefen Vergleich durchführt. Hier ist ein einfaches Beispiel ohne externe Bibliotheken:
function deepEqual(obj1, obj2) {
if (typeof obj1 !== 'object' || typeof obj2 !== 'object') return false;
if (obj1 === obj2) return true;
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
if (keys1.length !== keys2.length) return false;
for (const key of keys1) {
if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) {
return false;
}
}
return true;
}
const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
if (deepEqual(obj1, obj2)) {
console.log('Die Objekte haben den gleichen Inhalt.');
} else {
console.log('Die Objekte haben unterschiedlichen Inhalt.');
}
Beachte, dass diese einfache Implementierung möglicherweise nicht alle Randfälle abdeckt und für spezifische Anforderungen angepasst werden kann. Verwende externe Bibliotheken für robustere und allgemeinere Lösungen.