JavaScript grandeint


Tabla de contenido

    Mostrar tabla de contenidos

Las variables JavaScript BigInt se utilizan para almacenar valores enteros grandes que son demasiado grandes para ser representados por un Número de 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;

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>Integer Precision</h2>

<p>Integers (numbers without a period or exponent notation) are accurate up to 15 digits:</p>

<p id="demo"></p>

<script>
let x = 999999999999999;
let y = 9999999999999999;
document.getElementById("demo").innerHTML = x + "<br>" + y;
</script>

</body>
</html>


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 BigInt():

Ejemplos

let x = 9999999999999999;
let y = 9999999999999999n;

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>Integer and BigInt</h2>

<p id="demo"></p>

<script>
let x = 9999999999999999;
let y = BigInt("9999999999999999");
document.getElementById("demo").innerHTML = x + "<br>" + y;
</script>

</body>
</html>


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

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>Create a BigInt</h2>

<p id="demo"></p>

<script>
let x = 123456789012345678901234567890n;
let y = BigInt("123456789012345678901234567890");
document.getElementById("demo").innerHTML = x + "<br>" + y;
</script>

</body>
</html>



BigInt: un nuevo tipo de datos JavaScript

El tipode de JavaScript de un BigInt es "bigint":

Ejemplo

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

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>BigInt typeof</h2>

<p>The typeof a BigInt is:</p>
<p id="demo"></p>

<script>
let x = BigInt("9999999999999999");
document.getElementById("demo").innerHTML = typeof x;
</script>

</body>
</html>


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

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

1. Cadena
2. Número
3. Bigint
4. Booleano
5. Indefinido
6. Nulo
7. Símbolo
8. Objeto


Operadores BigInt

Operadores que se pueden utilizar en un Número de JavaScript También se puede utilizar en un BigInt.

Ejemplo de multiplicación BigInt

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

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavScript Bigint</h1>
<h2>BigInt Multiply</h2>
<p>Operators that can be used a Number can be used on a BigInt.</p>
<p id="demo"></p>

<script>
let x = 9007199254740995n;
let y = 9007199254740995n;
let z = x * y;

document.getElementById("demo").innerHTML = z; 
</script>

</body>
</html>

Notas

Aritmética entre un BigInt y un Número no está permitido (la conversión de tipo pierde información).

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


Decimales Int Grandes

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;

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavScript Bigint</h1>
<h2>BigInt Divide</h2>

<p>A BigInt can not have decimals.</p>
<p>Cannot mix BigInt and other types, use explicit conversions.</p>
<p id="demo"></p>

<script>
let x = 5n;
let y = Number(x) / 2;

document.getElementById("demo").innerHTML = y; 
</script>

</body>
</html>

BigInt Hex, 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;

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavScript Bigint</h1>
<h2>Hex, Octal and Binary</h2>

<p id="demo"></p>


<script>
let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;

document.getElementById("demo").innerHTML = hex + "<br>" + oct + "<br>" + bin; 
</script>

</body>
</html>

Curiosidad de precisión

El redondeo puede comprometer la seguridad del programa:

Ejemplo MAX_SAFE_INTEGER

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

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavScript Numbers</h1>
<h2>Integer Precision</h2>

<p>Is 9007199254740992 equal to 9007199254740993?</p>

<p id="demo"></p>


<script>
let x = 9007199254740992 === 9007199254740993;
document.getElementById("demo").innerHTML = x;
</script>

</body>
</html>

Soporte del navegador

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

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


Enteros seguros mínimos y máximos

ES6 agregó propiedades máximas y mínimas al objeto Número:

  • MAX_SAFE_INTEGER

  • MIN_SAFE_INTEGER

Ejemplo MAX_SAFE_INTEGER

let x = Number.MAX_SAFE_INTEGER;

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h2>Number Object Properties</h2>

<p>MAX_SAFE_INTEGER</p>

<p id="demo"></p>

<script>
let  x = Number.MAX_SAFE_INTEGER;
document.getElementById("demo").innerHTML = x;
</script>

</body>
</html>

MIN_SAFE_INTEGER Ejemplo

let x = Number.MIN_SAFE_INTEGER;

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h2>Number Object Properties</h2>

<p>MIN_SAFE_INTEGER</p>

<p id="demo"></p>

<script>
let  x = Number.MIN_SAFE_INTEGER;
document.getElementById("demo").innerHTML = x;
</script>

</body>
</html>

Nuevos métodos numéricos

ES6 también agregó 2 nuevos métodos al objeto Número:

  • Number.isInteger()

  • Number.isSafeInteger()


El método Number.isInteger()

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

Ejemplo: esEntero()

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

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>The isInteger() Method</h2>

<p>The isInteger() method returns true if the argument is an integer.</p>
<p>Otherwise it returns false.</p>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML =
Number.isInteger(10) + "<br>" + Number.isInteger(10.5);
</script>

</body>
</html>

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 true si el argumento es un entero seguro.

El ejemplo esSafeInteger()

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

Pruébelo usted mismo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>The isSafeInteger() Method</h2>

<p>The isSafeInteger() method returns true if the argument is a safe integer.</p>
<p>Otherwise it returns false.</p>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML =
Number.isSafeInteger(10) + "<br>" + Number.isSafeInteger(12345678901234567890);
</script>

</body>
</html>

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