Restwert (%)
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 Restwert (%
)-Operator gibt den Rest zurück, der verbleibt, wenn ein Operand durch einen zweiten Operanden dividiert wird. Er nimmt immer das Vorzeichen des Dividenden an.
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
x % y
Beschreibung
Der %
-Operator ist für zwei Typen von Operanden überladen: Zahl und BigInt. Er zwingt beide Operanden zunächst zu numerischen Werten und prüft die Typen dieser. Bei BigInt-Operanden wird der Restwert-Berechnung mit BigInt durchgeführt, andernfalls mit Zahlen. Ein TypeError
wird ausgelöst, wenn ein Operand zu einem BigInt und der andere zu einer Zahl wird.
Für die Operation n % d
wird n
als Dividende 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 oder wenn n
±0 ist, wird die Dividende n
zurückgegeben.
Wenn beide Operanden ungleich null und endlich sind, wird der Rest r
berechnet als r := n - d * q
, wobei q
die ganze Zahl ist, sodass r
das gleiche Vorzeichen wie die Dividende n
hat, während es so nah wie möglich bei 0 liegt.
Beachten Sie, dass in den meisten Sprachen '%' ein Restwert-Operator ist, in einigen (z.B. Python, Perl) aber ein Modulo-Operator. Modulo wird definiert als k := n - d * q
, wobei q
die ganze Zahl ist, sodass k
das gleiche Vorzeichen wie der Divisor d
hat, während es so nah wie möglich bei 0 liegt. Für zwei Werte mit demselben Vorzeichen sind die beiden gleichwertig; sind die Operanden jedoch unterschiedlichen Vorzeichens, hat das Moduloergebnis immer das gleiche Vorzeichen wie der Divisor, während der Rest den gleichen Vorzeichen wie die Dividende hat, was dazu führen kann, dass sie sich um eine Einheit von d
unterscheiden. Um ein Modulo in JavaScript zu erhalten, anstelle von n % d
, verwenden Sie ((n % d) + d) % d
. In JavaScript wird die Modulo-Operation (die keinen eigenen Operator hat) verwendet, um den zweiten Operanden von bitweisen Schiebeoperatoren zu normalisieren (<<
, >>
, etc.), sodass der Versatz immer einen positiven Wert hat.
Bei BigInt-Divisionen wird ein RangeError
ausgelöst, wenn der Divisor y
0n
ist. Dies liegt daran, dass der Restwert einer Division durch Null NaN
ergibt, jedoch hat BigInt kein NaN
.
Beispiele
Restwert mit positiver Dividende
13 % 5; // 3
1 % -2; // 1
1 % 2; // 1
2 % 3; // 2
5.5 % 2; // 1.5
3n % 2n; // 1n
Restwert mit negativer Dividende
-13 % 5; // -3
-1 % 2; // -1
-4 % 2; // -0
-3n % 2n; // -1n
Restwert mit NaN
NaN % 2; // NaN
Restwert mit Unendlichkeit
Infinity % 2; // NaN
Infinity % 0; // NaN
Infinity % Infinity; // NaN
2 % Infinity; // 2
0 % Infinity; // 0
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-multiplicative-operators |