Signatur
Beschreibung
Der Rest-Operator (auch Modulo-Operator genannt) berechnet den Rest einer Division zweier Zahlen. Das Ergebnis hat dabei dasselbe Vorzeichen wie der Dividend (der linke Operand) – dies unterscheidet ihn vom mathematischen Modulo, bei dem das Ergebnis immer nicht-negativ ist.
Typische Anwendungsfälle sind die Prüfung, ob eine Zahl gerade oder ungerade ist (n % 2 === 0), das zyklische Durchlaufen von Arrays oder Indizes (index % array.length) sowie das Begrenzen von Werten auf einen bestimmten Wertebereich.
Der Operator funktioniert mit ganzen Zahlen und Gleitkommazahlen. Bei Operanden, die keine Zahlen sind, versucht JavaScript eine implizite Typkonvertierung via ToNumber(). Sonderfälle: Division durch 0 ergibt NaN, ebenso wie Infinity % Infinity. Ist der Dividend 0 und der Divisor eine endliche Zahl ungleich 0, lautet das Ergebnis 0.
Seit ES2021 gibt es den verwandten zuweisenden Rest-Operator %=, der den Rest berechnet und direkt der linken Variablen zuweist (x %= y entspricht x = x % y).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $a Pflicht | number | — | Der Dividend – die Zahl, die geteilt wird. Das Vorzeichen des Ergebnisses entspricht dem Vorzeichen dieses Operanden. |
| $b Pflicht | number | — | Der Divisor – die Zahl, durch die geteilt wird. Ist dieser Wert 0, ergibt das Ergebnis NaN. |
Rückgabewert
a / b. Das Vorzeichen entspricht dem des Dividenden a. Kann NaN sein, wenn einer der Operanden nicht in eine Zahl umgewandelt werden kann oder der Divisor 0 ist.Beispiele
Gerade/Ungerade-Prüfung
const isEven = (n) => n % 2 === 0;
console.log(isEven(4)); // true
console.log(isEven(7)); // false
console.log(isEven(-12)); // true
Zyklischer Array-Index
const colors = ['rot', 'grün', 'blau'];
// Immer im gültigen Index-Bereich bleiben, egal wie groß i wird
for (let i = 0; i < 9; i++) {
console.log(colors[i % colors.length]);
}
Gleitkommazahlen und Vorzeichen
console.log(7.5 % 2); // 1.5
console.log(-7 % 3); // -1 (Vorzeichen des Dividenden!)
console.log(7 % -3); // 1
console.log(0 % 5); // 0
console.log(5 % 0); // NaN
console.log(Infinity % 2); // NaN
Zuweisender Rest-Operator %=
let punkte = 17;
punkte %= 5; // 17 % 5 = 2
console.log(punkte); // 2
// Wichtig · Fallstricke
Vorzeichen-Falle: Im Gegensatz zum mathematischen Modulo (immer ≥ 0) hat das Ergebnis in JavaScript das Vorzeichen des Dividenden. -7 % 3 ergibt -1, nicht 2. Wer ein immer nicht-negatives Ergebnis benötigt, kann folgenden Trick verwenden: ((n % m) + m) % m.
Sonderfälle mit NaN: Division durch 0, Infinity % Infinity sowie nicht-numerische Operanden (die ToNumber() nicht umwandeln kann, z. B. "abc") liefern NaN.
Gleitkomma-Ungenauigkeiten: Da JavaScript intern IEEE 754-Arithmetik verwendet, können Gleitkomma-Ergebnisse minimal von dem erwarteten Wert abweichen. Für präzise Integer-Arithmetik empfiehlt sich der Einsatz von BigInt (7n % 3n).