Exponentiation (**)
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2017.
Der **Exponentiations-Operator (**
)** gibt das Ergebnis zurück, wenn der erste Operand auf die Potenz des zweiten Operanden angehoben wird. Er ist äquivalent zu Math.pow()
, außer dass er auch BigInts als Operanden akzeptiert.
Probieren Sie es aus
console.log(3 ** 4);
// Expected output: 81
console.log(10 ** -2);
// Expected output: 0.01
console.log(2 ** (3 ** 2));
// Expected output: 512
console.log((2 ** 3) ** 2);
// Expected output: 64
Syntax
x ** y
Beschreibung
Der **
-Operator ist für zwei Typen von Operanden überladen: Nummern und BigInt. Er erzwingt zunächst die Umwandlung beider Operanden in numerische Werte und überprüft dann deren Typen. Er führt eine BigInt-Exponentiation aus, wenn beide Operanden zu BigInts werden; andernfalls führt er eine numerische Exponentiation aus. Ein TypeError
wird ausgelöst, wenn ein Operand zu einem BigInt wird, der andere jedoch eine Nummer bleibt.
Für sowohl Zahlen als auch BigInts gilt: 0
hoch eine positive Potenz ergibt 0
, und 0
hoch die Potenz 0
ergibt 1
. Für Zahlen ergibt 0
hoch eine negative Zahl Infinity
, während -0
hoch eine negative Zahl -Infinity
ergibt.
NaN ** 0
(und das äquivalente Math.pow(NaN, 0)
) ist der einzige Fall, bei dem NaN
nicht durch mathematische Operationen propagiert wird – es ergibt 1
, obwohl der Operand NaN
ist. Zusätzlich unterscheidet sich das Verhalten, wenn die base
1 ist und exponent
nicht endlich ist (±Infinity oder NaN
), von IEEE 754, was spezifiziert, dass das Ergebnis 1 sein sollte. JavaScript gibt jedoch NaN
zurück, um die Rückwärtskompatibilität mit dem ursprünglichen Verhalten zu erhalten.
Bei BigInt-Exponentiation wird ein RangeError
ausgelöst, wenn der Exponent y
negativ ist. Dies liegt daran, dass jeder negative Exponent wahrscheinlich einen Wert zwischen 0 und 1 (außer die Basis ist 1
, -1
oder 0
) ergibt, der auf Null gerundet wird, was wahrscheinlich ein Entwicklerfehler ist.
Der Exponentiations-Operator ist rechtsassoziativ: a ** b ** c
ist gleich a ** (b ** c)
.
In den meisten Programmiersprachen, wie PHP, Python und anderen, die einen Exponentiations-Operator (**
) haben, wird der Exponentiations-Operator so definiert, dass er eine höhere Priorität als unäre Operatoren hat, wie unäres +
und unäres -
, aber es gibt ein paar Ausnahmen. Zum Beispiel hat der **
-Operator in Bash eine niedrigere Priorität als unäre Operatoren.
In JavaScript ist es unmöglich, einen mehrdeutigen Exponentiations-Ausdruck zu schreiben. Das heißt, Sie können keinen unären Operator (mit Priorität 14, einschließlich +
/-
/~
/!
/++
/--
/delete
/void
/typeof
/await
) direkt vor die Basenummer setzen; das führt zu einem SyntaxError.
Zum Beispiel ergibt -2 ** 2
in Bash 4, aber -4 in anderen Sprachen (wie Python). Dies ist in JavaScript ungültig, da die Operation mehrdeutig ist. Sie müssen eine Seite klammern – zum Beispiel als -(2 ** 2)
–, um die Absicht eindeutig zu machen.
Beachten Sie, dass einige Programmiersprachen das Caret-Symbol ^
für Exponentiation verwenden, aber JavaScript verwendet dieses Symbol für den Bitweise-XOR-Operator.
Beispiele
Exponentiation mit Zahlen
2 ** 3; // 8
3 ** 2; // 9
3 ** 2.5; // 15.588457268119896
10 ** -1; // 0.1
2 ** 1024; // Infinity
NaN ** 2; // NaN
NaN ** 0; // 1
1 ** Infinity; // NaN
Andere Nicht-BigInt-Werte werden in Zahlen umgewandelt:
2 ** "3"; // 8
2 ** "hello"; // NaN
Exponentiation mit BigInts
2n ** 3n; // 8n
2n ** 1024n; // A very large number, but not Infinity
Sie können BigInt- und Nummer-Operanden bei der Exponentiation nicht mischen.
2n ** 2; // TypeError: Cannot mix BigInt and other types, use explicit conversions
2 ** 2n; // TypeError: Cannot mix BigInt and other types, use explicit conversions
Um eine Exponentiation mit einem BigInt und einem Nicht-BigInt durchzuführen, konvertieren Sie einen der Operanden:
2n ** BigInt(2); // 4n
Number(2n) ** 2; // 4
Assoziativität
2 ** 3 ** 2; // 512
2 ** (3 ** 2); // 512
(2 ** 3) ** 2; // 64
Verwendung mit unären Operatoren
Um das Vorzeichen des Ergebnisses eines Exponentiationsausdrucks zu invertieren:
-(2 ** 2); // -4
Um die Basis eines Exponentiationsausdrucks negativ zu machen:
(-2) ** 2; // 4
Spezifikationen
Specification |
---|
ECMAScript® 2025 Language Specification # sec-exp-operator |
Browser-Kompatibilität
Report problems with this compatibility data on GitHubdesktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Exponentiation ( ** ) |
Legend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support