BigInt do JavaScript
- Página Anterior Números JS
- Próxima Página Métodos Numéricos JS
As variáveis BigInt do JavaScript são usadas para armazenar valores inteiros muito grandes que não podem ser representados por números normais do JavaScript.
Precisão de Inteiros do JavaScript
Os inteiros no JavaScript podem ter no máximo 15 dígitos de precisão:
Precisão de Inteiros
let x = 999999999999999; let y = 9999999999999999;
No JavaScript, todos os números são armazenados em formato de ponto flutuante de 64 bits (padrão IEEE 754).
De acordo com esse padrão, inteiros grandes não podem ser representados com precisão e serão arredondados.
Portanto, o JavaScript só pode representar inteiros dentro do seguinte intervalo de maneira segura:
- o maior é 9007199254740991(253-1)
- o menor é -9007199254740991(-(253-1))
Valores inteiros fora deste intervalo perdem precisão.
Como criar BigInt
Para criar BigInt, você pode adicionar n
,ou chame BigInt()
Função:
Exemplo 1
let x = 9999999999999999; let y = 9999999999999999n;
Exemplo 2
let x = 1234567890123456789012345n; let y = BigInt(1234567890123456789012345);
BigInt: um novo tipo de dados do JavaScript
O tipo do JavaScript de BigInt é "bigint
:
Exemplo
let x = BigInt(999999999999999); let type = typeof x;
BigInt é o segundo tipo de dados numéricos no JavaScript (após Number).
Para BigInt, o JavaScript suporta um total de 8 tipos de dados:
- String
- Number
- Bigint
- Boolean
- Undefined
- Null
- Symbol
- Object
Operadores BigInt
Os operadores usados para o tipo Number do JavaScript também podem ser usados para BigInt.
Exemplo de Multiplicação de BigInt
let x = 9007199254740995n; let y = 9007199254740995n; let z = x * y;
Atenção
Não é permitido realizar operações aritméticas entre BigInt e Number (a conversão de tipo perderá informações).
BigInt não pode realizar operações de deslocamento à direita sem sinal (>>>), pois não tem largura fixa.
Casa decimal de BigInt
BigInt não pode ter casa decimal.
Exemplo de divisão de BigInt
let x = 5n; let y = x / 2; // Erro: Não é possível misturar BigInt e outros tipos, use conversão explícita.
let x = 5n; let y = Number(x) / 2;
BigInt hexadecimal, octal e binário
BigInt também pode ser escrito em representação hexadecimal, octal ou binária:
Instância hexadecimal de BigInt
let hex = 0x20000000000003n; let oct = 0o400000000000000003n; let bin = 0b100000000000000000000000000000000000000000000000000011n;
Curiosidade de Precisão
A arredondamento pode comprometer a segurança do programa:
Instância de MAX_SAFE_INTEGER
9007199254740992 === 9007199254740993; // true !!!
Suporte do navegador
Desde setembro de 2020, todos os navegadores suportam BigInt:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 67 | Edge 79 | Firefox 68 | Safari 14 | Opera 54 |
Maio de 2018 | Janeiro de 2020 | Julho de 2019 | Setembro de 2020 | Junho de 2018 |
Inteiros seguros mínimo e máximo
O ES6 adicionou as propriedades max e min ao objeto Number:
MAX_SAFE_INTEGER
MIN_SAFE_INTEGER
Instância de MAX_SAFE_INTEGER
let x = Number.MAX_SAFE_INTEGER;
Instância de MIN_SAFE_INTEGER
let x = Number.MIN_SAFE_INTEGER;
Novos métodos numéricos
O ES6 adicionou dois novos métodos ao objeto Number:
Number.isInteger()
Number.isSafeInteger()
Método Number.isInteger()
Se o parâmetro for um inteiro, o método Number.isInteger() retorna true
.
Exemplo isInteger()
Number.isInteger(10); Number.isInteger(10.5);
Método Number.isSafeInteger()
Inteiros seguros são inteiros que podem ser representados com precisão como números de precisão dupla.
Se o parâmetro for um inteiro seguro, o método Number.isSafeInteger() retorna true
.
Exemplo isSafeInteger()
Number.isSafeInteger(10); Number.isSafeInteger(12345678901234567890);
Inteiros seguros são inteiros de -(253 de -1) a +253 de -1) todos os inteiros.
Este é um inteiro seguro: 9007199254740991. Este não é um inteiro seguro: 9007199254740992.
- Página Anterior Números JS
- Próxima Página Métodos Numéricos JS