Remainder (%)
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 Operand geteilt wird. Er übernimmt immer das Vorzeichen des Dividenden.
Probieren Sie es aus
Syntax
x % y
Beschreibung
Der %
-Operator ist für zwei Typen von Operanden überladen: Zahl und BigInt. Er wandelt zunächst beide Operanden in numerische Werte um und prüft deren Typen. Er führt die BigInt-Restberechnung durch, wenn beide Operanden zu BigInts werden; andernfalls führt er die Numerische Restberechnung durch. Ein TypeError
wird ausgelöst, wenn ein Operand ein BigInt wird, der andere jedoch eine Zahl.
Für die Operation n % d
wird n
Dividende und d
Divisor genannt. 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 n
±0 ist, wird die Dividende n
zurückgegeben.
Wenn beide Operanden ungleich null und endlich sind, wird der Rest r
wie folgt berechnet: r := n - d * q
, wobei q
die Ganzzahl ist, sodass r
dasselbe Vorzeichen wie die Dividende n
hat, während sie so nah wie möglich bei 0 liegt.
Beachten Sie, dass in den meisten Sprachen '%' ein Rest-Operator ist, in einigen (z.B. Python, Perl) jedoch ein Modulo-Operator ist. Modulo ist definiert als k := n - d * q
, wobei q
die Ganzzahl ist, sodass k
dasselbe 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, aber wenn die Operanden unterschiedliche Vorzeichen haben, hat das Modulo-Ergebnis immer dasselbe Vorzeichen wie der Divisor, während der Rest dasselbe 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, verwenden Sie ((n % d) d) % d
anstelle von n % d
. In JavaScript wird die Modulo-Operation (die keinen eigenen Operator hat) verwendet, um den zweiten Operanden von Bitweisen-Schiebungs-Operatoren (<<
, >>
, etc.) zu normalisieren, sodass der Versatz immer einen positiven Wert hat.
Für BigInt-Division wird ein RangeError
ausgelöst, wenn der Divisor y
0n
ist. Dies liegt daran, dass der numerische Rest durch null NaN
zurückgibt, aber BigInt hat kein Konzept von NaN
.
Beispiele
Rest mit positiver Dividende
13 % 5; // 3
1 % -2; // 1
1 % 2; // 1
2 % 3; // 2
5.5 % 2; // 1.5
3n % 2n; // 1n
Rest mit negativer Dividende
-13 % 5; // -3
-1 % 2; // -1
-4 % 2; // -0
-3n % 2n; // -1n
Rest mit NaN
NaN % 2; // NaN
Rest mit Infinity
Infinity % 2; // NaN
Infinity % 0; // NaN
Infinity % Infinity; // NaN
2 % Infinity; // 2
0 % Infinity; // 0
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-multiplicative-operators |
Browser-Kompatibilität
BCD tables only load in the browser