--- title: Vergleichsoperatoren slug: >- conflicting/Web/JavaScript/Reference/Operators_5b3986b830cf68059c03079ef10ff039 tags: - JavaScript - Operator - Reference translation_of: Web/JavaScript/Reference/Operators translation_of_original: Web/JavaScript/Reference/Operators/Comparison_Operators original_slug: Web/JavaScript/Reference/Operators/Vergleichsoperatoren ---
{{jsSidebar("Operators")}}

JavaScript kennt sowohl den strikten als auch den Typ konvertierenden Vergleich. Ein strikter Vergleich (z. B. ===) gibt nur true zurück, wenn der gleiche Typ und der gleiche Wert vorhanden sind. Der häufiger verwendete abstrakte Vergleich (z. B. ==) wandelt die Operanden in den gleichen Typen um, bevor sie verglichen werden. Bei relationalen Vergleichsoperatoren (z. B. <=) werden die Operanden vor dem Vergleich zuerst in elementare Datentypen konvertiert und dann in gleiche Typen umgewandelt.

Strings werden entsprechend der lexikographischen Ordnung, basierend auf den Unicode, verglichen.

{{EmbedInteractiveExample("pages/js/expressions-comparisonoperators.html")}}

Merkmale von Vergleichen:

Gleichheitsoperatoren

Gleichheit (==)

Der Gleichheitsoperator konvertiert die Operanden, wenn sie nicht vom gleichen Typs sind und prüft dann auf strikte Gleichheit. Sind beide Operanden Objekte, vergleicht JavaScript die Referenzen; Referenzen gelten als gleich, wenn sie auf das gleiche Objekt im Speicher zeigen.

Syntax

x == y

Beispiele

1    ==  1     // true
'1'  ==  1     // true
1    == '1'    // true
0    == false  // true
0    == null   // false
var object1 = {'key': 'value'}, object2 = {'key': 'value'}
object1 == object2 // false
0    == undefined  // false
null == undefined  // true

Ungleichheit (!=)

Der Ungleichheitsoperator gibt true zurück, wenn die Operanden nicht gleich sind. Wenn die beiden Operanden nicht vom gleichen Typ sind, versucht JavaScript die Operanden in einen, für den Vergleich passenden Typ, umzuwandeln. Wenn beide Operanden Objekte sind, vergleicht JavaScript die Referenzen; Referenzen sind ungleich, wenn sie auf verschiedene Objekte im Speicher verweisen.

Syntax

x != y

Beispiele

1 !=   2     // true
1 !=  "1"    // false
1 !=  '1'    // false
1 !=  true   // false
0 !=  false  // false

Identität / strikte Gleichheit (===)

Der Identitätsoperator gibt true zurück, wenn die Operanden strikt gleich sind (siehe oben) ohne eine Typkonvertierung

Syntax

x === y

Beispiele

3 === 3   // true
3 === '3' // false
var object1 = {'key': 'value'}, object2 = {'key': 'value'}
object1 === object2 // false

Nicht identisch / Strikte Ungleichheit (!==)

Der strikte Ungleichheitsoperator gibt true zurück, wenn die Operanden nicht vom gleichen Typ sind bzw. ungleich sind.

Syntax

x !== y

Beispiele

3 !== '3' // true
4 !== 3   // true

Relationale Operatoren

Jeder dieser Operatoren wird die valueOf() Funktion aufrufen, bevor ein Vergleich durchgeführt wird.

Größer-als-Operator (>)

Der Größer-als-Operator gibt true zurück, wenn der linke Operand größer als der rechte Operand ist.

Syntax

x > y

Beispiele

4 > 3 // true

Größer-oder-gleich-Operator (>=)

Der Größer-oder-gleich-Operator gibt true zurück, wenn der linke Operand größer als oder gleich dem rechten Operanden ist.

Syntax

 x >= y

Beispiele

4 >= 3 // true
3 >= 3 // true

Kleiner-als-Operator (<)

Der Kleiner-als-Operator gibt true zurück, wenn der linke Operand kleiner als der rechte Operand ist.

Syntax

 x < y

Beispiele

3 < 4 // true

Kleiner-oder-gleich-Operator (<=)

Der Kleiner-oder-gleich-Operator gibt true zurück, wenn der linke Operand kleiner oder gleich dem rechten Operanden ist.

Syntax

 x <= y

Beispiele

3 <= 4 // true

Die Gleichheitsoperatoren anwenden

Die Standard-Gleichheitsoperatoren (== und !=) benutzen den Abstract Equality Comparison Algorithmus, um zwei Operanden zu vergleichen. Sind die Operanden unterschiedlichen Typs, wird vor dem Vergleich zuerst versucht sie in gleiche Typen umzuwandeln; z.B. wird beim Ausdruck 5 == '5'  das Zeichen auf der rechten Seite in eine Zahl konvertiert.

Die strikten Gleichheitsoperatoren (=== und !==) benutzen den Strict Equality Comparison Algorithmus und sind dafür gedacht, Operanden des gleichen Typs zu vergleichen. Wenn die Operanden von unterschiedlichen Typen sind, ist das Ergebnis immer false, wie 5 !== '5'.

Strikte Gleichheitsoperatoren sollten verwendet werden, wenn die Operanden sowohl einen bestimmten Typen als auch Wert haben sollen. Ansonsten benutzt man die abstrakten Gleichheitsoperatoren, die es einem erlauben Operanden unterschiedlicher Typen zu vergleichen.

Wenn beim Vergleich eine Typkonvertierung vorgenommen wird (z.B. beim nicht-strikten Vergleich), konvertiert JavaScript in die Typen {{jsxref("String")}}, {{jsxref("Number")}}, {{jsxref("Boolean")}} und {{jsxref("Object")}} und führt den Vergleich dann aus:

Hinweis: String Objekte sind vom Typ Objekte, nicht String! String Objekte werden selten eingesetzt, so dass das folgende Ergebnis überraschend sein kann:
// true, da beide Operanden vom Typ String sind (string primitives)
'foo' === 'foo'

var a = new String('foo');
var b = new String('foo');

// false, da a und b auf verschiedene Objekte zeigen
a == b

// false, da a und b auf verschiedene Objekte zeigen
a === b

// true, da a und 'foo' verschiedene Typen sind und das Objekt (a)
// vor dem Vergleich zum String 'foo' umgewandelt wird
a == 'foo' 

Spezifikationen

Spezifikation Status Kommentar
{{SpecName('ES1')}} {{Spec2('ES1')}} Initial Definition. Implementiert in JavaScript 1.0
{{SpecName('ES3')}} {{Spec2('ES3')}} Fügt === und !== Operatoren hinzu. Implementiert in JavaScript 1.3
{{SpecName('ES5.1', '#sec-11.8')}} {{Spec2('ES5.1')}} In verschiedenen Kapiteln der Spezifikation definiert: Relational Operators, Equality Operators
{{SpecName('ES6', '#sec-relational-operators')}} {{Spec2('ES6')}} In verschiedenen Kapiteln der Spezifikation definiert: Relational Operators, Equality Operators
{{SpecName('ESDraft', '#sec-relational-operators')}} {{Spec2('ESDraft')}} In verschiedenen Kapiteln der Spezifikation definiert: Relational Operators, Equality Operators

Browserkompatibilität

{{Compat("javascript.operators.comparison")}}

Siehe auch