Start · Sprachen · JavaScript · Referenz · Rest (%)

Rest (%)

Operator

Der Rest-Operator <code>%</code> gibt den Rest zurück, der nach der ganzzahligen Division des linken Operanden durch den rechten Operanden übrig bleibt.

seit JavaScript ES1 Kategorie: syntax

Signatur

a % b

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

Typ
number
Beschreibung
Der ganzzahlige oder Gleitkomma-Rest der Division 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
true false 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]);
}
rot grün blau rot grün blau rot grün blau

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
1.5 -1 1 0 NaN NaN

Zuweisender Rest-Operator %=

let punkte = 17;
punkte %= 5; // 17 % 5 = 2
console.log(punkte); // 2
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).