Mathematische Operatoren und das „Math“-Objekt
Funktionen
Ausblick auf das DOM (Teil 1 von 2)

JavaScript: Vergleichsverhalten bei verschiedenen Datentypen

Vergleich zwischen Zahlen

BeispielErgebnisErklärung
5 > 3trueEinfacher numerischer Vergleich
5 < 3falseEinfacher numerischer Vergleich
5 >= 5trueGleich erfüllt die „oder gleich“-Bedingung
NaN == NaNfalseNaN ist mit nichts gleich, nicht einmal mit sich selbst
NaN === NaNfalseAuch mit strikter Gleichheit ist NaN nicht mit sich selbst gleich
Infinity > 1000000trueInfinity ist größer als jede endliche Zahl
-Infinity < -1000000trueNegative Infinity ist kleiner als jede endliche Zahl

Vergleich zwischen Strings

BeispielErgebnisErklärung
"a" < "b"trueLexikografischer Vergleich (alphabetische Reihenfolge)
"Apfel" < "Banane"trueLexikografischer Vergleich
"10" < "2"trueBei Strings zählt die lexikografische Ordnung (1 kommt vor 2)
"a" < "A"falseGroßbuchstaben kommen vor Kleinbuchstaben im Unicode
"ä" > "z"trueUmlaute und Sonderzeichen haben spezifische Unicode-Positionen

Vergleich mit impliziter Typkonvertierung (==, !=)

BeispielErgebnisErklärung
5 == "5"trueString wird zu Zahl konvertiert
0 == ""trueLeerer String wird zu 0 konvertiert
0 == falsetrueBoolean false wird zu 0 konvertiert
1 == truetrueBoolean true wird zu 1 konvertiert
null == undefinedtrueSpezialfall in JavaScript
null == 0falsenull wird nicht zu 0 konvertiert
"5" != 5falseNach Konvertierung sind die Werte gleich

Vergleich ohne Typkonvertierung (===, !==)

BeispielErgebnisErklärung
5 === "5"falseUnterschiedliche Typen (number vs. string)
0 === ""falseUnterschiedliche Typen (number vs. string)
0 === falsefalseUnterschiedliche Typen (number vs. boolean)
null === undefinedfalseUnterschiedliche Typen
"5" !== 5trueUnterschiedliche Typen (string vs. number)

Objektvergleiche

BeispielErgebnisErklärung
{} == {}falseObjekte werden nach Referenz verglichen, nicht nach Inhalt
{} === {}falseAuch strikte Gleichheit vergleicht Objektreferenzen
const obj = {}; obj == objtrueGleiche Referenz
[] == []falseArrays sind Objekte und werden nach Referenz verglichen
[] == ""trueLeeres Array wird bei impliziter Konvertierung zu leerem String
[1] == "1"trueArray wird zu String konvertiert und dann verglichen

In-Operator

BeispielErgebnisErklärung
"length" in []trueArrays haben eine length-Eigenschaft
"toString" in {}trueAlle Objekte erben toString
"x" in {x: 10}trueDirektes Eigentum
"y" in {x: 10}falseEigenschaft existiert nicht
0 in [10, 20]trueBei Arrays sucht in nach dem Index
5 in [10, 20]falseIndex 5 existiert nicht in diesem Array

Instanceof-Operator

BeispielErgebnisErklärung
[] instanceof ArraytrueEin Array ist eine Instanz der Array-Klasse
{} instanceof ObjecttrueEin Objekt ist eine Instanz der Object-Klasse
"text" instanceof StringfalsePrimitiver String ist keine String-Objekt-Instanz
new String("text") instanceof StringtrueString-Objekt ist eine Instanz der String-Klasse
function(){} instanceof FunctiontrueFunktionen sind Instanzen der Function-Klasse
new Date() instanceof DatetrueEin Date-Objekt ist eine Instanz der Date-Klasse
[].constructor === ArraytrueAlternative 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

  1. Verwende === und !== für konsistentere, sicherere Vergleiche ohne unerwartete Typkonvertierungen.
  2. Nutze Array.isArray() statt instanceof für Array-Prüfungen (funktioniert auch mit verschiedenen Kontexten).
  3. Verwende den in-Operator mit einer zusätzlichen hasOwnProperty-Prüfung, wenn du nur direkte (nicht geerbte) Eigenschaften prüfen willst.
  4. 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.