JavaScript
BigInt
Explica cómo representar enteros mayores que el rango seguro de Number con BigInt, sus operaciones permitidas y sus límites de interoperabilidad.
- Última actualización
- Actualizada
- Nivel
- Aplicación
- Fundamentos de programación
JavaScript
Explica cómo representar enteros mayores que el rango seguro de Number con BigInt, sus operaciones permitidas y sus límites de interoperabilidad.
bigint representa enteros de precisión arbitraria.
const value = 9007199254740993n;Literal:
const value = 123n;Conversión:
BigInt("9007199254740993");
BigInt(42);Un Number solo puede convertirse sin perder significado si ya representa un entero exacto.
typeof 10n; // "bigint"
10n === 10; // falseLa igualdad flexible puede coercionar en algunos casos:
10n == 10; // truePrefiere tipos coherentes y comparación estricta.
10n + 5;
// TypeErrorConvierte explícitamente al tipo apropiado.
10n + BigInt(5);
Number(10n) + 5;Convertir BigInt grande a Number puede perder precisión.
10n + 2n;
10n - 2n;
10n * 2n;
10n ** 3n;
10n % 3n;7n / 2n; // 3nDescarta la fracción hacia cero. BigInt no representa decimales.
Math.max(1n, 2n);
// TypeErrorImplementa operaciones BigInt o usa APIs que lo acepten.
10n < 20; // trueLas comparaciones relacionales entre BigInt y Number están definidas, pero mezclar tipos aumenta complejidad. Normaliza en fronteras.
JSON.stringify({ id: 10n });
// TypeErrorJSON no tiene un tipo BigInt estándar. Define una representación:
const serialized = JSON.stringify(
{ id: 10n },
(_, value) =>
typeof value === "bigint"
? value.toString()
: value,
);Al reconstruir necesitas saber qué strings representan BigInt.
Un ID grande recibido desde JSON debería conservarse como string si no se realizan cálculos.
{
"id": "9007199254740993"
}BigInt tiene sentido cuando necesitas operaciones enteras; string suele ser mejor para identificadores opacos.
BigInt permite enteros grandes, pero sus operaciones no garantizan tiempo constante. No implementes criptografía sensible manualmente; usa APIs criptográficas del entorno.
new BigInt64Array([1n, 2n]);Almacena enteros de 64 bits y aplica wrapping al rango, a diferencia de un BigInt general sin límite práctico fijo.
values.toSorted((a, b) =>
a < b ? -1 : a > b ? 1 : 0,
);Restar a - b falla si el array mezcla BigInt y Number.
class Sequence {
#value = 0n;
next() {
this.#value += 1n;
return this.#value;
}
}El contador puede crecer más allá del rango seguro sin perder enteros.
¿Por qué 7n / 2n devuelve 3n?
Porque BigInt solo representa enteros y la división descarta la parte fraccionaria hacia cero.
Date, zonas horarias e Intl explica instantes, calendarios y presentación local.