Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Ausdrücke und Operatoren
  5. Gleichheit (==)

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

Gleichheit (==)

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨Juli 2015⁩.

DerGleichheitsoperator (==) prüft, ob seine beiden Operanden gleich sind, und gibt ein Boolesches Ergebnis zurück. Im Gegensatz zumstrikten Gleichheitsoperator versucht er, Operanden unterschiedlichen Typs zu konvertieren und zu vergleichen.

Probieren Sie es aus

console.log(1 == 1);// Expected output: trueconsole.log("hello" == "hello");// Expected output: trueconsole.log("1" == 1);// Expected output: trueconsole.log(0 == false);// Expected output: true

Syntax

js
x == y

Beschreibung

Die Gleichheitsoperatoren (== und!=) bieten dieIsLooselyEqual Semantik. Diese kann grob wie folgt zusammengefasst werden:

  1. Wenn die Operanden denselben Typ haben, werden sie wie folgt verglichen:
    • Objekt: gibttrue nur zurück, wenn beide Operanden auf dasselbe Objekt verweisen.
    • String: gibttrue nur zurück, wenn beide Operanden dieselben Zeichen in der gleichen Reihenfolge haben.
    • Zahl: gibttrue nur zurück, wenn beide Operanden denselben Wert haben.+0 und-0 werden als derselbe Wert behandelt. Wenn einer der OperandenNaN ist, wirdfalse zurückgegeben;NaN ist also nie gleichNaN.
    • Boolescher Wert: gibttrue nur zurück, wenn beide Operandentrue oder beidefalse sind.
    • BigInt: gibttrue nur zurück, wenn beide Operanden denselben Wert haben.
    • Symbol: gibttrue nur zurück, wenn beide Operanden auf dasselbe Symbol verweisen.
  2. Wenn einer der Operandennull oderundefined ist, muss der andere ebenfallsnull oderundefined sein, umtrue zurückzugeben. Andernfalls wirdfalse zurückgegeben.
  3. Wenn einer der Operanden ein Objekt und der andere ein primitiver Wert ist,konvertieren Sie das Objekt in einen primitiven Wert.
  4. In diesem Schritt werden beide Operanden in primitive Werte konvertiert (einer von String, Number, Boolean, Symbol und BigInt). Der Rest der Konvertierung erfolgt fallweise.
    • Wenn sie vom gleichen Typ sind, vergleichen Sie sie nach Schritt 1.
    • Wenn einer der Operanden ein Symbol ist, der andere jedoch nicht, geben Siefalse zurück.
    • Wenn einer der Operanden ein Boolescher Wert ist, der andere jedoch nicht,konvertieren Sie den Booleschen Wert in eine Zahl:true wird in 1 konvertiert undfalse in 0. Dann vergleichen Sie die beiden Operanden erneut locker.
    • Zahl zu String:konvertieren Sie den String in eine Zahl. Ein Konvertierungsfehler führt zuNaN, was die Gleichheit garantiertfalse sein lässt.
    • Zahl zu BigInt: vergleichen Sie nach ihrem mathematischen Wert. Wenn die Zahl ±Infinity oderNaN ist, geben Siefalse zurück.
    • String zu BigInt: konvertieren Sie den String in ein BigInt unter Verwendung desselben Algorithmus wie der KonstruktorBigInt(). Wenn die Konvertierung fehlschlägt, geben Siefalse zurück.

Lockere Gleichheit istsymmetrisch:A == B hat immer dieselbe Semantik wieB == A für beliebige Werte vonA undB (außer für die Reihenfolge der angewendeten Konvertierungen).

Der bemerkenswerteste Unterschied zwischen diesem Operator und demstrikten Gleichheitsoperator (===) besteht darin, dass der strikte Gleichheitsoperator keine Typkonvertierung durchführt. Stattdessen betrachtet der strikte Gleichheitsoperator Operanden unterschiedlichen Typs immer als verschieden. Der strikte Gleichheitsoperator führt im Wesentlichen nur Schritt 1 durch und gibt dann in allen anderen Fällenfalse zurück.

Es gibt einen "willentlichen Verstoß" gegen den obigen Algorithmus: Wenn einer der Operandendocument.all ist, wird es behandelt, als wäre esundefined. Das bedeutet, dassdocument.all == nulltrue ist, aberdocument.all === undefined && document.all === null istfalse.

Beispiele

Vergleich ohne Typkonvertierung

js
1 == 1; // true"hello" == "hello"; // true

Vergleich mit Typkonvertierung

js
"1" == 1; // true1 == "1"; // true0 == false; // true0 == null; // false0 == undefined; // false0 == !!null; // true, look at Logical NOT operator0 == !!undefined; // true, look at Logical NOT operatornull == undefined; // trueconst number1 = new Number(3);const number2 = new Number(3);number1 == 3; // truenumber1 == number2; // false

Vergleich von Objekten

js
const object1 = {  key: "value",};const object2 = {  key: "value",};console.log(object1 == object2); // falseconsole.log(object1 == object1); // true

Vergleich von Strings und String-Objekten

Beachten Sie, dass Strings, die mitnew String() konstruiert wurden, Objekte sind. Wenn Sie eines davon mit einem String-Literal vergleichen, wird dasString-Objekt in ein String-Literal konvertiert und die Inhalte werden verglichen. Wenn jedoch beide OperandenString-Objekte sind, dann werden sie als Objekte verglichen und müssen auf dasselbe Objekt verweisen, damit der Vergleich erfolgreich ist:

js
const string1 = "hello";const string2 = String("hello");const string3 = new String("hello");const string4 = new String("hello");console.log(string1 == string2); // trueconsole.log(string1 == string3); // trueconsole.log(string2 == string3); // trueconsole.log(string3 == string4); // falseconsole.log(string4 == string4); // true

Vergleich von Daten und Strings

js
const d = new Date("1995-12-17T03:24:00");const s = d.toString(); // for example: "Sun Dec 17 1995 03:24:00 GMT-0800 (Pacific Standard Time)"console.log(d == s); // true

Vergleich von Arrays und Strings

js
const a = [1, 2, 3];const b = "1,2,3";a == b; // true, `a` converts to stringconst c = [true, 0.5, "hey"];const d = c.toString(); // "true,0.5,hey"c == d; // true

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-equality-operators

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp