Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Exponentiation (**)
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since März 2017.
Der **Exponentiationsoperator (**)** gibt das Ergebnis des Erhebens des ersten Operanden zur Potenz des zweiten Operanden zurück. Er entsprichtMath.pow(), außer dass er auchBigInts als Operanden akzeptiert.
In diesem Artikel
Probieren Sie es aus
console.log(3 ** 4);// Expected output: 81console.log(10 ** -2);// Expected output: 0.01console.log(2 ** (3 ** 2));// Expected output: 512console.log((2 ** 3) ** 2);// Expected output: 64Syntax
x ** yBeschreibung
Der** Operator ist für zwei Typen von Operanden überladen: number undBigInt. Erzwingt beide Operanden zuerst dazu, numerische Werte zu sein und überprüft ihre Typen. Er führt BigInt-Exponentiation aus, wenn beide Operanden zu BigInts werden; andernfalls führt er number-Exponentiation aus. EinTypeError wird ausgelöst, wenn ein Operand zu einem BigInt wird, der andere jedoch zu einem number.
Für sowohl numbers als auch BigInts gilt, dass0 zu einer positiven Potenz erhoben0 zurückgibt, und0 zur Potenz0 erhebt1 zurückgibt. Für numbers gilt, dass0 zu einer negativen Zahl erhobenInfinity zurückgibt, während-0 zu einer negativen Zahl erhoben-Infinity zurückgibt.
NaN ** 0 (und das entsprechendeMath.pow(NaN, 0)) ist der einzige Fall, in demNaN sich nicht durch mathematische Operationen hindurch propagiert — es gibt1 zurück, obwohl der OperandNaN ist. Zusätzlich unterscheidet sich das Verhalten, wennbase 1 ist undexponent nicht endlich (±Infinity oderNaN) ist, von IEEE 754, das vorschreibt, dass das Ergebnis 1 sein sollte, während JavaScriptNaN zurückgibt, um die Rückwärtskompatibilität mit seinem ursprünglichen Verhalten zu erhalten.
Bei der BigInt-Exponentiation wird einRangeError ausgelöst, wenn der Exponenty negativ ist. Dies liegt daran, dass ein negativer Exponent wahrscheinlich zu einem Wert zwischen 0 und 1 führen würde (außer der Basis ist1,-1 oder0), der auf null gerundet wird, und wahrscheinlich einen Entwicklerfehler darstellt.
Der Exponentiationsoperator istrechtsassoziativ:a ** b ** c ist gleicha ** (b ** c).
In den meisten Sprachen, wie PHP, Python und anderen, die einen Exponentiationsoperator (**) haben, hat der Exponentiationsoperator eine höhere Priorität als unäre Operatoren, wie z.B. unäres+ und unäres-, es gibt jedoch einige Ausnahmen. Zum Beispiel ist im Bash-Skript der** Operator definiert, eine niedrigere Priorität als unäre Operatoren zu haben.
In JavaScript ist es unmöglich, einen mehrdeutigen Exponentiationsausdruck zu schreiben. Das bedeutet, Sie können keinen unären Operator (mitPriorität 14, einschließlich+/-/~/!/++/--/delete/void/typeof/await) direkt vor der Basisziffer setzen;das wird einen SyntaxError verursachen.
Zum Beispiel ist-2 ** 2 im Bash-Skript 4, aber in anderen Sprachen (wie Python) -4. Dies ist in JavaScript ungültig, da die Operation mehrdeutig ist. Sie müssen entweder die eine oder die andere Seite einklammern — zum Beispiel als-(2 ** 2) — um die Absicht eindeutig zu machen.
Beachten Sie, dass einige Programmiersprachen das Zirkumflexsymbol^ für Exponentiation verwenden, aber JavaScript verwendet dieses Symbol für denbitweisen XOR Operator.
Beispiele
>Exponentiation mit Zahlen
2 ** 3; // 83 ** 2; // 93 ** 2.5; // 15.58845726811989610 ** -1; // 0.12 ** 1024; // InfinityNaN ** 2; // NaNNaN ** 0; // 11 ** Infinity; // NaNAndere nicht-BigInt-Werte werden zu Zahlen umgewandelt:
2 ** "3"; // 82 ** "hello"; // NaNExponentiation mit BigInts
2n ** 3n; // 8n2n ** 1024n; // A very large number, but not InfinitySie können BigInt- und Zahlenoperanden bei der Exponentiation nicht mischen.
2n ** 2; // TypeError: Cannot mix BigInt and other types, use explicit conversions2 ** 2n; // TypeError: Cannot mix BigInt and other types, use explicit conversionsUm eine Exponentiation mit einem BigInt und einem Nicht-BigInt durchzuführen, konvertieren Sie einen der Operanden:
2n ** BigInt(2); // 4nNumber(2n) ** 2; // 4Assoziativität
2 ** 3 ** 2; // 5122 ** (3 ** 2); // 512(2 ** 3) ** 2; // 64Nutzung mit unären Operatoren
Um das Vorzeichen des Ergebnisses eines Exponentiationsausdrucks zu invertieren:
-(2 ** 2); // -4Um die Basis eines Exponentiationsausdrucks zu einer negativen Zahl zu machen:
(-2) ** 2; // 4Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-exp-operator> |