¿Es el asterisco doble ** un operador de JavaScript válido?

2 minutos de lectura

Avatar de usuario de Iván González
Iván González

Resolví un kata en CodeWars y estaba revisando algunas de las otras soluciones cuando encontré el doble asterisco para indicar el poder de. Investigué un poco y puedo ver que este es un operador válido en python, pero no puedo ver nada al respecto en la documentación de JavaScript.

var findNb = m =>
{
  var n = Math.floor((4*m)**.25);
  var sum = x => (x*(x+1)/2)**2;
  return sum(n) == m ? n : -1;
}

Sin embargo, cuando ejecuto esta solución en CodeWars, parece funcionar. Me pregunto si esto es nuevo en ES6, aunque no he encontrado nada al respecto.

  • ** es el indicador de descuento para negrita. Probablemente fue un error de sintaxis del autor al escribir la respuesta de descuento.

    – Reactular

    22 oct 2015 a las 15:19

  • de Especificaciones: Operador multiplicativo: uno de * / %

    – Grundy

    22 oct 2015 a las 15:21

  • @Grundy también está usando la flecha gorda, por lo que es posible

    – r3wt

    22/10/2015 a las 15:34

  • El flecha gorda (=>) está en la especificación ES6. El operador exponencial (**) está en la especificación ES7. No sé nada sobre codewars, pero esto podría ser JavaScript válido si estuvieras usando rastreador o Babel

    – Howard Renollet

    22/10/2015 a las 17:10


  • Entonces, solo miré Codewars, todo su código se ejecuta a través de BabelJS, lo que explica por qué este código funciona con los operadores ES6 y ES7.

    – Howard Renollet

    22/10/2015 a las 18:04

Sí. ** es el operador de exponenciación y es el equivalente de Math.pow.

Se introdujo en ECMAScript 2016 (ES7).

Para más detalles, consulte el propuesta y esto capítulo de Explorando ES2016.

Avatar de usuario de Magus
Mago

** se introdujo en ECMAScript 2016 (ES7). Pero tenga en cuenta que no todos los entornos de javascript lo implementan (por ejemplo, Internet Explorer no lo admite).

Si quieres ser navegador cruzado, tienes que usar Math.pow.

Math.pow(4, 5)

  • ^^^ de hecho, arrojará Uncaught SyntaxError: Unexpected token *(…)

    – taxicala

    22 oct 2015 a las 15:19

  • Esta respuesta depende de la versión de ECMAScript que esté usando, porque es incorrecta para ES7 como señaló Thomas

    –Luca Steeb

    20 de diciembre de 2016 a las 19:23

  • Esta respuesta puede haber sido correcta cuando se publicó, pero ahora es incorrecta. Debería editarse para mencionar las versiones de JavaScript en las que ** existe/no existe.

    – chris

    12 de abril de 2017 a las 13:13

** operator es un operador válido en ES7. Tiene el mismo significado que Math.pow(x,y)
Por ejemplo, 2**3 es igual que Math.pow(2,3)

Aquí están los detalles de Wikipedia.

Dos nuevas funciones añadidas en ES7:

el operador de exponenciación (**) y Array.prototype.includes

https://en.wikipedia.org/wiki/ECMAScript#cite_ref-ES2016_12-1

Puedes jugar con esto en este Compilador Babel Live

¿Ha sido útil esta solución?