Signatur
Beschreibung
Der Restzuweisungsoperator %= ist eine Kurzschreibweise für x = x % y. Er kombiniert den Modulo-Operator (%) mit einer direkten Zuweisung: Der aktuelle Wert der linken Variable wird durch den rechten Operanden geteilt, der verbleibende Rest wird berechnet und das Ergebnis zurück in die linke Variable geschrieben.
Typische Einsatzgebiete sind das Prüfen auf gerade/ungerade Zahlen (n % 2), das zyklische Durchlaufen von Arrays oder Indizes, sowie das Begrenzen von Zählern auf einen bestimmten Wertebereich. Der Operator folgt dabei denselben Regeln wie der einfache Modulo-Operator: Das Vorzeichen des Ergebnisses richtet sich nach dem Vorzeichen des Dividenden (linker Operand), nicht nach dem des Divisors.
Wie alle zusammengesetzten Zuweisungsoperatoren setzt %= voraus, dass die linke Seite eine gültige Zuweisung-Zielstelle ist (eine Variable, eine Objekt-Eigenschaft oder ein Array-Element). Der Operator arbeitet mit Zahlen (number) sowie mit BigInt-Werten, sofern beide Seiten denselben Typ haben. Bei gemischten Typen kommt die übliche JavaScript-Typumwandlung zum Einsatz, was zu unerwarteten NaN-Ergebnissen führen kann.
Ist der rechte Operand 0 (oder 0n bei BigInt), liefert der Operator für normale Zahlen NaN zurück; bei BigInt wird stattdessen ein RangeError geworfen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $x Pflicht | number | bigint | — | Linker Operand (Dividend) und gleichzeitig das Ziel der Zuweisung. Muss eine gültige Referenz sein (Variable, Eigenschaft, Array-Element). |
| $y Pflicht | number | bigint | — | Rechter Operand (Divisor). Bei 0 wird NaN zurückgegeben; bei BigInt und 0n wird ein RangeError geworfen. |
Rückgabewert
x / y, gleichzeitig der neue Wert von x. Das Vorzeichen entspricht dem Vorzeichen des ursprünglichen Dividenden x.Beispiele
Grundlegende Verwendung
let a = 17;
a %= 5;
console.log(a); // 17 % 5 = 2
let b = -13;
b %= 4;
console.log(b); // -13 % 4 = -1 (Vorzeichen des Dividenden)
let c = 10;
c %= 0;
console.log(c); // NaN (Division durch 0)
Zyklisches Array-Durchlaufen
const colors = ['rot', 'grün', 'blau'];
let index = 0;
const next = () => {
const color = colors[index];
index += 1;
index %= colors.length; // index bleibt immer im Bereich 0–2
return color;
};
console.log(next()); // 'rot'
console.log(next()); // 'grün'
console.log(next()); // 'blau'
console.log(next()); // 'rot' ← springt zurück
BigInt-Unterstützung
let big = 100n;
big %= 7n;
console.log(big); // 100n % 7n = 2n
try {
let x = 5n;
x %= 0n; // RangeError!
} catch (e) {
console.error(e.constructor.name, e.message);
}
Gerade / ungerade prüfen
const numbers = [1, 2, 3, 4, 5, 6];
const evens = [];
const odds = [];
for (let n of numbers) {
let r = n;
r %= 2; // 0 = gerade, 1 = ungerade
if (r === 0) evens.push(n);
else odds.push(n);
}
console.log('Gerade:', evens);
console.log('Ungerade:', odds);
// Wichtig · Fallstricke
Vorzeichen-Verhalten: Anders als in der Mathematik (und anders als Python oder Ruby) hat der JavaScript-Restoperator das Vorzeichen des Dividenden: -7 % 3 ergibt -1, nicht 2. Wer einen stets nicht-negativen Rest benötigt, kann schreiben: ((x % y) + y) % y.
Gemischte Typen: Das Mischen von number und bigint (z. B. let x = 5n; x %= 2;) wirft einen TypeError. Beide Seiten müssen denselben Typ haben.
Strings und andere Typen: Nicht-numerische Werte werden automatisch in eine Zahl umgewandelt. Schlägt die Umwandlung fehl (z. B. bei "abc"), ist das Ergebnis NaN.
Browser-Kompatibilität: %= ist seit ES1 Bestandteil des Standards und in allen gängigen Browsern sowie Node.js uneingeschränkt verfügbar. BigInt-Unterstützung erfordert moderne Umgebungen (Chrome 67+, Firefox 68+, Safari 14+, Node.js 10.3+).