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 **Exponentiationsoperator (**
)** gibt das Ergebnis zurück, wenn der erste Operand auf die Potenz des zweiten Operanden erhoben wird. Er ist äquivalent zu Math.pow()
, akzeptiert jedoch auch BigInts als Operanden.
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 Arten von Operanden überladen: Zahl und BigInt. Zuerst wandelt er beide Operanden in numerische Werte um und überprüft deren Typen. Er führt BigInt-Exponentiation durch, wenn beide Operanden zu BigInts werden; andernfalls führt er eine Zahl-Exponentiation durch. Ein TypeError
wird ausgelöst, wenn ein Operand ein BigInt wird, der andere jedoch eine Zahl bleibt.
Für sowohl Zahlen als auch BigInts gilt: 0
hoch eine positive Potenz ergibt 0
, und 0
hoch eine Potenz von 0
ergibt 1
. Für Zahlen gilt: 0
hoch eine negative Zahl ergibt Infinity
, während -0
hoch eine negative Zahl -Infinity
ergibt.
NaN ** 0
(und das entsprechende Math.pow(NaN, 0)
) ist der einzige Fall, in dem NaN
sich nicht durch mathematische Operationen fortpflanzt — es ergibt 1
, obwohl der Operand NaN
ist. Darüber hinaus unterscheidet sich das Verhalten, wenn base
1 und exponent
nicht endlich (±Infinity oder NaN
) ist, von IEEE 754. Dieses spezifiziert, dass das Ergebnis 1 sein sollte, während JavaScript NaN
zurückgibt, um die Rückwärtskompatibilität mit seinem ursprünglichen Verhalten zu bewahren.
Bei der Exponentiation von BigInt wird ein RangeError
ausgelöst, wenn der Exponent y
negativ ist. Dies liegt daran, dass jeder negative Exponent wahrscheinlich ein Ergebnis zwischen 0 und 1 ergeben würde (es sei denn, die Basis ist 1
, -1
oder 0
), das auf null gerundet wird, und vermutlich ein Entwicklerfehler ist.
Der Exponentiationsoperator ist rechtsassoziativ: a ** b ** c
ist gleich a ** (b ** c)
.
In den meisten Sprachen, wie PHP, Python und anderen, die einen Exponentiationsoperator (**
) haben, ist der Exponentiationsoperator so definiert, dass er eine höhere Priorität als unäre Operatoren, wie unäres +
und unäres -
, hat, aber es gibt einige Ausnahmen. Zum Beispiel hat der **
-Operator in Bash eine niedrigere Priorität als unäre Operatoren.
In JavaScript ist es unmöglich, einen mehrdeutigen Exponentiationsausdruck zu schreiben. Das bedeutet, dass Sie keinen unären Operator (mit Priorität 14, einschließlich +
/-
/~
/!
/++
/--
/delete
/void
/typeof
/await
) direkt vor der Basiszahl setzen können; dies würde zu einem SyntaxError führen.
Zum Beispiel ergibt -2 ** 2
4 in Bash, ist 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 unmissverständlich zu machen.
Beachten Sie, dass einige Programmiersprachen das Caret-Symbol ^
für die Exponentiation verwenden, aber JavaScript verwendet dieses Symbol für den bitweisen 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 keine BigInt- und Zahlen-Operanden in der Exponentiation 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 zwischen 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 umzukehren:
-(2 ** 2); // -4
Um die Basis eines Exponentiationsausdrucks zu einer negativen Zahl zu machen:
(-2) ** 2; // 4
Spezifikationen
Specification |
---|
ECMAScript® 2025 Language Specification # sec-exp-operator |
Browser-Kompatibilität
BCD tables only load in the browser