Los números en JavaScript tienen un límite, no sé cuál, pero tienen un límite y si se sobrepasa, se experimentan comportamientos raros. Es por ello que no podemos tener números muy grandes, porque los mismos pueden ocasionar problemas de contabilidad y esas cosas.

Pero no nos podemos quedar así, y es por eso que ha llegado el tipo de dato BigInt en JavaScript (seguramente también está el BigFloat o algo así) que permite tener enteros muy grandes (algo así como la maravillosa librería GMP programada en C)

En este post veremos cómo usar el tipo de dato BigInt en JavaScript, así como sus ventajas y algunos usos. Gracias a BigInt podemos hacer aritmética sin preocuparnos por los límites.

BigInt en JavaScript

Lo bueno de este tipo de dato BigInt es que permite operar con él como si fuera un dato nativo (de hecho es un tipo de dato nativo). Cuando usamos una librería, su uso sería algo como:

let numero = BigInt(1);

Bueno, de hecho su uso sí es así realmente, pero calma, que vamos poco a poco. Lo que quise decir es que si quisiéramos sumar usando una librería, se haría esto:

numero.add(1500);

Eso sumaría a numero el valor de 1500, pero no podríamos hacer algo así:

numero + 1500;

Porque sería inválido. Pues bien, este tipo de dato BigInt sí permite operar normalmente, así con sumas, restas y esas cosas como si se tratara de un dato nativo.

La desventaja de BigInt es que si el navegador no lo soporta, no hay un polyfill tan fácil de implementar, pues un polyfill no puede cambiar la forma en la que los operadores como +, -, * y / trabajan.

Pero bueno, ya estamos casi en 2019 y es hora de forzar al usuario a que se actualice. En fin, sí existe un polyfill pero se usa llamando a métodos como add en lugar de sumar normalmente, pruébalo si gustas.

¿Por qué BigInt?

Porque JavaScript trata a todos los números con la misma precisión. Aparte de ello, hay límites que tienen comportamientos inesperados cuando son sobrepasados. Veamos la siguiente imagen:

Aumentar números más allá del máximo en JS

Ok, el máximo es 9007199254740991 y si le aumentamos uno, sería 9007199254740992. Pero si le aumentamos 2, debería ser 9007199254740993, en cambio, en la consola sale 9007199254740992.

Lo que trato de decir es que si le sumamos 1 o 2, el resultado es el mismo. Esto es potencialmente peligroso, así que mejor usamos BigInt como veremos más abajo.

Usar BigInt en JavaScript

Podemos definir una variable de tipo BigInt de dos maneras. Llamando a la función global BigInt o agregando el sufijo n a un número. De las siguientes cosas, ambas son válidas:

let numero = BigInt(10);

let numero = 10n;

Y luego ya podemos operar normalmente, aunque hay que tener cuidado, porque no podemos sumar un BigInt con un simple número. Si, por ejemplo, ejecutamos:

10+20n

Genera un error:

No mezclar BigInt con otro tipo de dato

Pero podemos convertir fácilmente de la siguiente manera:

BigInt(10) + 20n;

Aunque en realidad podríamos haber hecho lo siguiente:

10n+20n;

Puede que el primer número sea una variable, y una variable no puede ser sufijada, por eso se llama a BigInt.

Números sin límite en JavaScript

Ahora podemos ir más allá de Number.MAX_SAFE_INTEGER y operar normalmente. Recuerda el ejemplo de arriba, ahora hagamos esto pero con BigInt:

Operar números en JavaScript más allá de los límites

Los resultados son correctos, y eso fue un ejemplo sencillo; porque podemos sumar más y más. O restar, multiplicar y dividir, todo eso que hacemos con datos numéricos primitivos.

Ventajas

Las ventajas son que ahora podemos operar con enteros con y sin signo más allá del límite. De esta manera, no debemos preocuparnos por desbordamientos o comportamientos inesperados.

La mala noticia es que no todos los navegadores tienen soporte para BigInt, pero con el tiempo eso cambiará.

Conclusiones

Por el momento no es seguro usar a BigInt, hay que esperar un poco más. En Node.JS todavía no hay soporte. Tampoco cuenta con ello Firefox ni Edge, sólo Chrome.

BigInt traerá grandes cambios a JavaScript, pero falta que sea aprobado e implementado en todos los lugares.

Y antes de que digan que Chrome quiere dominar al mundo (y si lo domina, se lo merece) esto es una propuesta de EcmaScript, algo así como quien regula todo de JavaScript. No es culpa de Chrome tener las cosas más novedosas.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.