Less than (<)
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Der Less than (<
) Operator gibt true
zurück, wenn der linke Operand kleiner als der rechte Operand ist, und false
andernfalls.
Probieren Sie es aus
Syntax
x < y
Beschreibung
Die Operanden werden mit mehreren Runden der Typumwandlung verglichen, die wie folgt zusammengefasst werden können:
- Zuerst werden Objekte in primitive Daten umgewandelt, indem deren Methoden
[Symbol.toPrimitive]()
(mit dem Hinweis"number"
),valueOf()
undtoString()
, in dieser Reihenfolge, aufgerufen werden. Der linke Operand wird immer vor dem rechten umgewandelt. Beachten Sie, dass obwohl[Symbol.toPrimitive]()
mit dem Hinweis"number"
aufgerufen wird (was bedeutet, dass eine leichte Präferenz besteht, dass das Objekt zu einer Zahl wird), der Rückgabewert nicht in eine Zahl konvertiert wird, da Zeichenketten weiterhin speziell behandelt werden. - Wenn beide Werte Zeichenketten sind, werden sie als Zeichenketten verglichen, basierend auf den Werten der UTF-16-Einheiten (nicht Unicode-Codepunkte), die sie enthalten.
- Andernfalls versucht JavaScript, nicht numerische Typen in numerische Werte umzuwandeln:
- Boolean-Werte
true
undfalse
werden in 1 bzw. 0 umgewandelt. null
wird in 0 umgewandelt.undefined
wird inNaN
umgewandelt.- Zeichenketten werden basierend auf den enthaltenen Werten konvertiert und werden als
NaN
konvertiert, wenn sie keine numerischen Werte enthalten.
- Boolean-Werte
- Wenn einer der Werte
NaN
ist, gibt der Operatorfalse
zurück. - Ansonsten werden die Werte als numerische Werte verglichen. BigInt und Zahlenwerte können miteinander verglichen werden.
Andere Operatoren, einschließlich >
, >=
und <=
, verwenden denselben Algorithmus wie <
. Es gibt zwei Fälle, in denen alle vier Operatoren false
zurückgeben:
- Wenn einer der Operanden in ein BigInt umgewandelt wird, während der andere in eine Zeichenkette umgewandelt wird, die nicht in einen BigInt-Wert konvertiert werden kann (es tritt ein Syntaxfehler auf, wenn an
BigInt()
übergeben). - Wenn einer der Operanden in
NaN
umgewandelt wird. (Zum Beispiel Zeichenketten, die nicht in Zahlen konvertiert werden können, oderundefined
.)
Für alle anderen Fälle haben die vier Operatoren die folgenden Beziehungen:
x < y === !(x >= y);
x <= y === !(x > y);
x > y === y < x;
x >= y === y <= x;
Hinweis:
Ein beobachtbarer Unterschied zwischen <
und >
ist die Reihenfolge der Typumwandlung, besonders wenn die Umwandlung in primitive Typen Nebeneffekte hat. Alle Vergleichsoperatoren wandeln den linken Operand vor dem rechten Operand um.
Beispiele
Vergleich Zeichenkette zu Zeichenkette
"a" < "b"; // true
"a" < "a"; // false
"a" < "3"; // false
"\uD855\uDE51" < "\uFF3A"; // true
Vergleich Zeichenkette zu Zahl
"5" < 3; // false
"3" < 3; // false
"3" < 5; // true
"hello" < 5; // false
5 < "hello"; // false
"5" < 3n; // false
"3" < 5n; // true
Vergleich Zahl zu Zahl
5 < 3; // false
3 < 3; // false
3 < 5; // true
Vergleich Zahl zu BigInt
5n < 3; // false
3 < 5n; // true
Vergleich von Boolean, null, undefined, NaN
true < false; // false
false < true; // true
0 < true; // true
true < 1; // false
null < 0; // false
null < 1; // true
undefined < 3; // false
3 < undefined; // false
3 < NaN; // false
NaN < 3; // false
Vergleich mit Nebeneffekten
Vergleiche zwingen ihre Operanden immer dazu, zu primitiven Datentypen umgewandelt zu werden. Das bedeutet, dass dasselbe Objekt innerhalb eines Vergleichsausdrucks unterschiedliche Werte haben kann. Zum Beispiel können Sie zwei Werte haben, die gleichzeitig größer und kleiner als der andere sind.
class Mystery {
static #coercionCount = -1;
valueOf() {
Mystery.#coercionCount++;
// The left operand is coerced first, so this will return 0
// Then it returns 1 for the right operand
return Mystery.#coercionCount % 2;
}
}
const l = new Mystery();
const r = new Mystery();
console.log(l < r && r < l);
// true
Warnung: Dies kann eine Quelle der Verwirrung sein. Wenn Ihre Objekte benutzerdefinierte Logik für die Umwandlung in primitive Daten bereitstellen, stellen Sie sicher, dass sie idempotent ist: Mehrfaches Umwandeln sollte denselben Wert zurückgeben.
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-relational-operators |
Browser-Kompatibilität
BCD tables only load in the browser