Rest (%)

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 Rest (%)-Operator gibt den Rest zurück, der übrig bleibt, wenn ein Operand durch einen zweiten Operanden dividiert wird. Er übernimmt stets das Vorzeichen des Dividenden.

Probieren Sie es aus

console.log(13 % 5);
// Expected output: 3

console.log(-13 % 5);
// Expected output: -3

console.log(4 % 2);
// Expected output: 0

console.log(-4 % 2);
// Expected output: -0

Syntax

js
x % y

Beschreibung

Der %-Operator ist für zwei Typen von Operanden überladen: Zahl und BigInt. Er erzwingt zunächst, dass beide Operanden in numerische Werte umgewandelt werden und prüft dann deren Typen. Wenn beide Operanden zu BigInts werden, führt er eine BigInt-Restoperation durch; andernfalls wird eine Zahl-Restoperation ausgeführt. Ein TypeError wird ausgelöst, wenn ein Operand ein BigInt wird, der andere jedoch eine Zahl.

Bei der Operation n % d wird n als Dividend und d als Divisor bezeichnet. Die Operation gibt NaN zurück, wenn einer der Operanden NaN ist, n ±Infinity ist oder wenn d ±0 ist. Andernfalls, wenn d ±Infinity ist oder wenn n ±0 ist, wird der Dividend n zurückgegeben.

Wenn beide Operanden nicht null und endlich sind, wird der Rest r berechnet als r := n - d * q, wobei q die ganze Zahl ist, sodass r dasselbe Vorzeichen wie der Dividend n hat und so nah wie möglich an 0 liegt.

Beachten Sie, dass in den meisten Sprachen % ein Rest-Operator ist, in einigen (z. B. Python, Perl) jedoch ein Modulo-Operator. Modulo wird definiert als k := n - d * q, wobei q die ganze Zahl ist, sodass k dasselbe Vorzeichen wie der Divisor d hat und so nah wie möglich an 0 liegt. Für zwei gleichartige Vorzeichen sind beide gleichwertig, aber wenn die Operanden unterschiedliche Vorzeichen haben, hat das Modulo-Ergebnis immer dasselbe Vorzeichen wie der Divisor, während der Rest dasselbe Vorzeichen wie der Dividend hat, was dazu führen kann, dass sie sich um eine Einheit von d unterscheiden. Um ein Modulo in JavaScript zu erhalten, verwenden Sie anstelle von n % d die Operation ((n % d) + d) % d. In JavaScript wird die Modulo-Operation (die keinen dedizierten Operator hat) verwendet, um den zweiten Operanden von Bit-Shift-Operatoren (<<, >> etc.) zu normalisieren, sodass der Offset stets einen positiven Wert hat.

Bei der BigInt-Division wird ein RangeError ausgelöst, wenn der Divisor y 0n ist. Der Rest einer Zahl durch Null liefert NaN, aber BigInt kennt kein Konzept von NaN.

Beispiele

Rest mit positivem Dividend

js
13 % 5; // 3
1 % -2; // 1
1 % 2; // 1
2 % 3; // 2
5.5 % 2; // 1.5

3n % 2n; // 1n

Rest mit negativem Dividend

js
-13 % 5; // -3
-1 % 2; // -1
-4 % 2; // -0

-3n % 2n; // -1n

Rest mit NaN

js
NaN % 2; // NaN

Rest mit Infinity

js
Infinity % 2; // NaN
Infinity % 0; // NaN
Infinity % Infinity; // NaN
2 % Infinity; // 2
0 % Infinity; // 0

Spezifikationen

Specification
ECMAScript® 2025 Language Specification
# sec-multiplicative-operators

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch