Vergleich zwischen Zahlen
Beispiel | Ergebnis | Erklärung |
---|
5 > 3 | true | Einfacher numerischer Vergleich |
5 < 3 | false | Einfacher numerischer Vergleich |
5 >= 5 | true | Gleich erfüllt die „oder gleich“-Bedingung |
NaN == NaN | false | NaN ist mit nichts gleich, nicht einmal mit sich selbst |
NaN === NaN | false | Auch mit strikter Gleichheit ist NaN nicht mit sich selbst gleich |
Infinity > 1000000 | true | Infinity ist größer als jede endliche Zahl |
-Infinity < -1000000 | true | Negative Infinity ist kleiner als jede endliche Zahl |
Vergleich zwischen Strings
Beispiel | Ergebnis | Erklärung |
---|
"a" < "b" | true | Lexikografischer Vergleich (alphabetische Reihenfolge) |
"Apfel" < "Banane" | true | Lexikografischer Vergleich |
"10" < "2" | true | Bei Strings zählt die lexikografische Ordnung (1 kommt vor 2) |
"a" < "A" | false | Großbuchstaben kommen vor Kleinbuchstaben im Unicode |
"ä" > "z" | true | Umlaute und Sonderzeichen haben spezifische Unicode-Positionen |
Vergleich mit impliziter Typkonvertierung (==, !=)
Beispiel | Ergebnis | Erklärung |
---|
5 == "5" | true | String wird zu Zahl konvertiert |
0 == "" | true | Leerer String wird zu 0 konvertiert |
0 == false | true | Boolean false wird zu 0 konvertiert |
1 == true | true | Boolean true wird zu 1 konvertiert |
null == undefined | true | Spezialfall in JavaScript |
null == 0 | false | null wird nicht zu 0 konvertiert |
"5" != 5 | false | Nach Konvertierung sind die Werte gleich |
Vergleich ohne Typkonvertierung (===, !==)
Beispiel | Ergebnis | Erklärung |
---|
5 === "5" | false | Unterschiedliche Typen (number vs. string) |
0 === "" | false | Unterschiedliche Typen (number vs. string) |
0 === false | false | Unterschiedliche Typen (number vs. boolean) |
null === undefined | false | Unterschiedliche Typen |
"5" !== 5 | true | Unterschiedliche Typen (string vs. number) |
Objektvergleiche
Beispiel | Ergebnis | Erklärung |
---|
{} == {} | false | Objekte werden nach Referenz verglichen, nicht nach Inhalt |
{} === {} | false | Auch strikte Gleichheit vergleicht Objektreferenzen |
const obj = {}; obj == obj | true | Gleiche Referenz |
[] == [] | false | Arrays sind Objekte und werden nach Referenz verglichen |
[] == "" | true | Leeres Array wird bei impliziter Konvertierung zu leerem String |
[1] == "1" | true | Array wird zu String konvertiert und dann verglichen |
In-Operator
Beispiel | Ergebnis | Erklärung |
---|
"length" in [] | true | Arrays haben eine length-Eigenschaft |
"toString" in {} | true | Alle Objekte erben toString |
"x" in {x: 10} | true | Direktes Eigentum |
"y" in {x: 10} | false | Eigenschaft existiert nicht |
0 in [10, 20] | true | Bei Arrays sucht in nach dem Index |
5 in [10, 20] | false | Index 5 existiert nicht in diesem Array |
Instanceof-Operator
Beispiel | Ergebnis | Erklärung |
---|
[] instanceof Array | true | Ein Array ist eine Instanz der Array-Klasse |
{} instanceof Object | true | Ein Objekt ist eine Instanz der Object-Klasse |
"text" instanceof String | false | Primitiver String ist keine String-Objekt-Instanz |
new String("text") instanceof String | true | String-Objekt ist eine Instanz der String-Klasse |
function(){} instanceof Function | true | Funktionen sind Instanzen der Function-Klasse |
new Date() instanceof Date | true | Ein Date-Objekt ist eine Instanz der Date-Klasse |
[].constructor === Array | true | Alternative Prüfung über die constructor-Eigenschaft |
Praxisbeispiele
Sichere Typüberprüfung
// Unterschied zwischen == und ===
let x = 0;
let y = "";
console.log(x == y); // true (mit Typkonvertierung)
console.log(x === y); // false (ohne Typkonvertierung)
Objekt-Eigenschaftsprüfung
const benutzer = {
name: "Max",
alter: 30
};
// Sicherer Zugriff auf möglicherweise nicht existierende Eigenschaften
if ("adresse" in benutzer) {
console.log(benutzer.adresse);
} else {
console.log("Keine Adresse vorhanden");
}
Typüberprüfung für Arrays
// Problem bei Array-Erkennung
console.log(typeof []); // "object" (nicht hilfreich)
// Bessere Prüfung mit instanceof oder Array.isArray()
console.log([] instanceof Array); // true
console.log(Array.isArray([])); // true (bevorzugte Methode)
Verhalten bei null und undefined
// Unterschiede bei null/undefined-Vergleichen
console.log(null == undefined); // true
console.log(null === undefined); // false
console.log(null == 0); // false (Spezialfall)
console.log(undefined == 0); // false
Empfohlene Praktiken
- Verwende === und !== für konsistentere, sicherere Vergleiche ohne unerwartete Typkonvertierungen.
- Nutze Array.isArray() statt instanceof für Array-Prüfungen (funktioniert auch mit verschiedenen Kontexten).
- Verwende den in-Operator mit einer zusätzlichen hasOwnProperty-Prüfung, wenn du nur direkte (nicht geerbte) Eigenschaften prüfen willst.
- Sei vorsichtig bei Vergleichen mit NaN – nutze stattdessen Number.isNaN().
Diese Referenztabelle sollte dir einen umfassenden Überblick über die relationalen Operatoren in JavaScript und ihre Verhaltensweisen geben.