Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.
Exponenciación (**)
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since marzo de 2017.
El operador de **exponenciación (**)** retorna el resultado de elevar el primer operando a la potencia del segundo operando. Es equivalente aMath.pow(), exepto que también aceptaBigInts como operandos.
In this article
Pruébalo
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: 64Sintaxis
x ** yDescripción
El operador** acepta dos tipos de operandos: número yBigInt. Primerointenta transformar los operandos a un valor numérico y prueba sus tipos. Realiza una exponenciación BigInt si el operando se convirtió en un BigInt; de lo contrario, realiza la negación de número. Se genera unTypeError si un operando es convertido a BigInt pero el otro se convierte en un número.
Tanto para números como para BigInts,0 elevado a una potencia positiva devuelve0 y0 elevado a una potencia de0 devuelve1. Para números,0 elevado a un número negativo devuelveInfinity, mientras que-0 elevado a un número negativo devuelve-Infinity.
NaN ** 0 (y su equivalenteMath.pow(NaN, 0)) es el único caso en el queNaN no se propaga a través de operaciónes matemáticas: devuelve1 a pesar de que el operando seaNAN. Además, cuando la base es 1 y el exponente no es infinito, (±Infinity oNaN) el comportamiento es diferente a IEEE 754, el cual especifica que el resultado debería ser 1, sin embargo JavaScript retornaNAN para preservar la compatibilidad con versiones anteriores con su comportamiento original.
Para exponenciación con BigInt, unRangeError es generado si el exponentey es negativo. Esto es porque cualquier exponente negativo probablemente daría como resultado un valor entre 0 y 1 (a menos que la base sea1,-1 o0), que se redondea a cero y probablemente sea un error del desarrollador.
El operador de exponenciación esasociativo derecho:a ** b ** c es igual aa ** (b ** c).
En muchos lenguajes como PHP, Python y otros que tienen un operador de exponenciación (**), el operador de exponenciación está definido que el operador de exponenciación tiene una precedencia mayor que los operadores unarios, como el unario+ y el unario-, pero existen algunas exepciones. Por ejemplo, en Bash,** se define que el operador tiene una precedencia menor que los operadores unarios.
En JavaScript es imposible escribir una expresión de exponenciación ambigua. Es decir, no se puede colocar un operador unario (conprecedencia 14, incluyendo+/-/~/!/++/--/delete/void/typeof/await) inmediatamente antes de el número base;hacerlo provocará un error de sintaxis.
Por ejemplo,-2 ** 2 es 4 en Bah, pero es -4 en otros lenguajes (como Python). Esto es inválido en JavaScript, ya que la operación es ambigua. Se tiene que poner entre paréntesis cada lado (-(2 ** 2) por ejemplo) para que la intención no sea ambigua.
Tenga en cuenta que algunos lenguajes de programación usan el símbolo de intercalación ^para la exponenciación, pero JavaScript usa ese símbolo para eloperador XOR bit a bit.
Ejemplos
>Exponenciación básica
2 ** 3; // 83 ** 2; // 93 ** 2.5; // 15.58845726811989610 ** -1; // 0.12 ** 1024; // InfinityNaN ** 2; // NaNNaN ** 0; // 11 ** Infinity; // NaN2n ** 3n; // 8n2n ** 1024n; // Un número muy grande, pero no infinito.2n ** 2; // TypeError: Cannot mix BigInt and other types, use explicit conversions// Para hacer una exponenciación con un BigInt y un elemento que no es un BigInt, convierta cualquiera de los dos operandos2n ** BigInt(2); // 4nNumber(2n) ** 2; // 4Asociatividad
2 ** 3 ** 2; // 5122 ** (3 ** 2); // 512(2 ** 3) ** 2; // 64Uso con operadores unarios
Para invertir el signo del resultado de una expresión de exponenciación:
-(2 ** 2); // -4Para forzar que la base de una expresión de exponenciación sea un número negativo:
(-2) ** 2; // 4Especificaciones
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-exp-operator> |