BigInt es un objeto incorporado que nos da JavaScript para representar un número entero más grande, mayor a 253 - 1 (el número más grande que puede representar el objeto tipo Number de manera confiable).

Para representar un BigInt se utiliza una n al final de un número entero o llamando a la función BigInt ().

const number = 9007199254740991;
const myBigInt = 9007199254740991n;
const otherBigInt = BigInt(9007199254740991);

console.log(myBigInt + 2n); // 9007199254740993n, OK!
console.log(otherBigInt + 2n); // 9007199254740993n, OK!
console.log(number + 2); // 9007199254740992, WTF!

Con typeof puedes ver claramente que estamos utilizando otro tipo de dato.

typeof 10 // number
typeof 10n // bigint

Operadores

Al igual que Number, con BigInt podemos usar los operadores +, -, *, /, ** y %.

const bigNumber = 9007199254740991n;

const bigNumberPlus = bigNumber + 5n // 9007199254740996n
bigNumberPlus - 2n // 9007199254740994n

bigNumber * 2n // 18014398509481982n
bigNumber % 4n // 3n

const bigNumberExp = 2n ** 54n // 18014398509481984n

El operador / también funciona con BigInt, solo que si el resultado llegase a ser decimal, este se va a redondear hacía 0.

const value = 6n / 2n;
// 3n

const round = 11n / 2n; // 5n (no 5.5n)

Comparaciones y condicionales

Un BigInt no es estrictamente igual a un Number, pero en términos generales si lo es.

0n === 0 // false

0n == 0 // true

De igual forma, estos se pueden comparar.

1n < 12 // true

5n > 1 // true

10n < 4 // false

10n > 10 // false

10n >= 10 // true

Un BigInt se comporta como un Number en algunos casos:

En un if:

if (0n) {
  console.log("Hola desde el if");
} else {
  console.log("Hola desde el else");
}

// Hola desde el else

En operadores lógicos:

0n || 12n // 12n

0n && 12n // 0n

!12n // false

!0n // true

Usando la función Boolean:

Boolean(0n) // false

Boolean(12n) // true

Recursos