JavaScript BigInt

JavaScript BigInt

Contenido original de W3Schools


Las variables JavaScript BigInt se utilizan para almacenar valores enteros que son demasiado grandes para ser representados por un número JavaScript normal.


Precisión de enteros de JavaScript

Los enteros de JavaScript solo tienen una precisión de hasta 15 dígitos:

Precisión entera:

let x = 999999999999999;
let y = 9999999999999999;

Ver ejemplo

En JavaScript, todos los números se almacenan en un formato de punto flotante de 64 bits (estándar IEEE 754).

Con este estándar, los números enteros grandes no se pueden representar exactamente y se redondearán.

Debido a esto, JavaScript sólo puede representar números enteros de forma segura:

Hasta 9007199254740991 +(253-1)

y

Hasta -9007199254740991 -(253-1).

Los valores enteros fuera de este rango pierden precisión.


Cómo crear un BigInt

Para crear un BigInt, agregue n al final de un número entero o llame a BigInt():

Ejemplo:

let x = 9999999999999999;
let y = 9999999999999999n;

Ver ejemplo

let x = 1234567890123456789012345n;
let y = BigInt(1234567890123456789012345)

Ver ejemplo


BigInt: un nuevo tipo de datos JavaScript

El tipo JavaScript de BigInt es bigint:

Ejemplo:

let x = BigInt(999999999999999);
let type = typeof x;

Ver ejemplo

BigInt es el segundo tipo de datos numéricos en JavaScript (después de number).

Con BigInt, el número total de tipos de datos admitidos en JavaScript es 8:

  1. String

  2. Number

  3. Bigint

  4. Boolean

  5. Undefined

  6. Null

  7. Symbol

  8. Object


Operadores BigInt

Los operadores que se pueden usar en un número de JavaScript también se pueden usar en BigInt.

Ejemplo:

let x = 9007199254740995n;
let y = 9007199254740995n;
let z = x * y;

Ver ejemplo


Notas

No se permite la aritmética entre BigInt y number (la conversión de tipos pierde información).

El desplazamiento a la derecha sin signo (>>>) no se puede realizar en un BigInt (no tiene un ancho fijo).


Decimales BigInt

Un BigInt no puede tener decimales.

Ejemplo de división BigInt

let x = 5n;
let y = x / 2;
// Error: Cannot mix BigInt and other types, use explicit conversion.
let x = 5n;
let y = Number(x) / 2;

Ver ejemplo


BigInt hexadecimal, octal y binario

BigInt también se puede escribir en notación hexadecimal, octal o binaria:

**************Ejemplo de BigInt hexadecimal

let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;

Ver ejemplo


Curiosidad de precisión

El redondeo puede comprometer la seguridad del programa:

Ejemplo MAX_SAFE_INTEGER

9007199254740992 === 9007199254740993; // is true !!!

Ver ejemplo


Soporte del navegador

BigInt es compatible con todos los navegadores desde septiembre de 2020:

ChromeEdgeFirefoxSafariOpera
Chrome 67Edge 79Firefox 68Safari 14Opera 54
May 2018Jan 2020Jul 2019Sep 2020Jun 2018

Enteros seguros mínimos y máximos

ES6 agregó propiedades máximas y mínimas al objeto number:

  • MAX_SAFE_INTEGER

  • MIN_SAFE_INTEGER

Ejemplo MAX_SAFE_INTEGER

let x = Number.MAX_SAFE_INTEGER;

Ver ejemplo

Ejemplo MIN_SAFE_INTEGER

let x = Number.MIN_SAFE_INTEGER;

Ver ejemplo


Nuevos métodos numéricos

ES6 también agregó 2 nuevos métodos al objeto number:

  • Number.isInteger()

  • Number.isSafeInteger()


El método Number.isInteger()

El método Number.isInteger() devuelve verdadero si el argumento es un número entero.

Ejemplo: isInteger()

Number.isInteger(10);
Number.isInteger(10.5);

Ver ejemplo


El método Number.isSafeInteger()

Un número entero seguro es un número entero que se puede representar exactamente como un número de doble precisión.

El método Number.isSafeInteger() devuelve verdadero si el argumento es un número entero seguro.

Ejemplo isSafeInteger()

Number.isSafeInteger(10);
Number.isSafeInteger(12345678901234567890);

Ver ejemplo

Los enteros seguros son todos los números enteros desde -(253 - 1) hasta +(253 - 1). Esto es seguro: 9007199254740991. Esto no es seguro: 9007199254740992.


Traducido con 💚 desde W3Schools.com

Did you find this article valuable?

Support Santos Romero by becoming a sponsor. Any amount is appreciated!