Start · Sprachen · JavaScript · Referenz · Restzuweisung (%=)

Restzuweisung (%=)

Operator

Der Restzuweisungsoperator (<code>%=</code>) berechnet den Rest der Division des linken Operanden durch den rechten und weist das Ergebnis dem linken Operanden zu.

seit JavaScript ES1 Kategorie: syntax

Signatur

x %= y

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

Typ
number | bigint
Beschreibung
Der Rest der Division 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)
2 -1 NaN

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
'rot' 'grün' 'blau' 'rot'

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);
}
2n RangeError Division by zero

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);
Gerade: [2, 4, 6] Ungerade: [1, 3, 5]

// 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+).