Table of contents
- Precisión de enteros de JavaScript
- Cómo crear un BigInt
- BigInt: un nuevo tipo de datos JavaScript
- Operadores BigInt
- Decimales BigInt
- BigInt hexadecimal, octal y binario
- Curiosidad de precisión
- Soporte del navegador
- Enteros seguros mínimos y máximos
- Nuevos métodos numéricos
- El método Number.isInteger()
- El método Number.isSafeInteger()
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;
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;
let x = 1234567890123456789012345n;
let y = BigInt(1234567890123456789012345)
BigInt
: un nuevo tipo de datos JavaScript
El tipo JavaScript de BigInt
es bigint
:
Ejemplo:
let x = BigInt(999999999999999);
let type = typeof x;
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:
String
Number
Bigint
Boolean
Undefined
Null
Symbol
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;
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;
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;
Curiosidad de precisión
El redondeo puede comprometer la seguridad del programa:
Ejemplo MAX_SAFE_INTEGER
9007199254740992 === 9007199254740993; // is true !!!
Soporte del navegador
BigInt
es compatible con todos los navegadores desde septiembre de 2020:
Chrome | Edge | Firefox | Safari | Opera |
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 number
:
MAX_SAFE_INTEGER
MIN_SAFE_INTEGER
Ejemplo MAX_SAFE_INTEGER
let x = Number.MAX_SAFE_INTEGER;
Ejemplo MIN_SAFE_INTEGER
let x = Number.MIN_SAFE_INTEGER;
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);
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);
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