Esta página foi traduzida do inglês pela comunidade.Saiba mais e junte-se à comunidade MDN Web Docs.
BigInt
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since setembro de 2020.
BigInt é um objeto nativo que fornece um modo de representar números inteiros maiores que 2^53, que é o maior número que o JavaScript consegue, com exatidão, representar com o tipo primitivoNumber.
In this article
Sintaxe
BigInt(value);Parâmetros
valueO valor numérico do objeto que está sendo criado. Pode ser umastring ou um número inteiro.
Nota:Observação:BigInt() não é usado com o operadornew.
Descrição
UmBigInt é criado com a acrescentação den ao final de um inteiro literal —10n — ou chamando a funçãoBigInt().
const theBiggestInt = 9007199254740991n;const alsoHuge = BigInt(9007199254740991);// ↪ 9007199254740991nconst hugeString = BigInt("9007199254740991");// ↪ 9007199254740991nconst hugeHex = BigInt("0x1fffffffffffff");// ↪ 9007199254740991nconst hugeBin = BigInt( "0b11111111111111111111111111111111111111111111111111111",);// ↪ 9007199254740991nIsso é parecido com umNumber em algumas partes, mas difere-se em alguns assuntos importantes — ele não pode ser usado com métodos no objetoMath e não pode ser misturado em operações ou qualquer instância deNumber.
Aviso:Number eBigInt não podem ser misturados em operações — eles devem ser manipulados com o mesmo tipo.
Tenha cuidado com a conversão e desconversão de valores, visto que a precisão deBigInt pode ser perdida com a conversào paraNumber.
Informações do tipo
Quando testado comtypeof , umBigInt vai devolver "bigint":
typeof 1n === "bigint"; // truetypeof BigInt("1") === "bigint"; // trueQuando envolvido em umObject, umBigInt vai ser considerado como um tipo normal de "object".
typeof Object(1n) === "object"; // trueOperadores
Os seguintes operadores podem ser usados comBigInts (ou comBigInts envolvidos em objetos):+,*,-,**,%.
const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER);// ↪ 9007199254740991const maxPlusOne = previousMaxSafe + 1n;// ↪ 9007199254740992nconst theFuture = previousMaxSafe + 2n;// ↪ 9007199254740993n, isso funciona agora!const multi = previousMaxSafe * 2n;// ↪ 18014398509481982nconst subtr = multi – 10n;// ↪ 18014398509481972nconst mod = multi % 10n;// ↪ 2nconst bigN = 2n ** 54n;// ↪ 18014398509481984nbigN * -1n// ↪ –18014398509481984nO operador/ também funciona com o esperado com números inteiros. No entanto, desde que esses sejamBigInts e nãoBigDecimals, essa operação vai arredondar para 0, o que significa que não vai retornar qualquer valor fracional.
Aviso:Uma operação com um resultado fracional será arredondado comBigInt.
const expected = 4n / 2n;// ↪ 2nconst rounded = 5n / 2n;// ↪ 2n, e não 2.5nComparações
UmBigInt não é estritamente igual a umNumber, mas é mais ou menos assim.
0n === 0;// ↪ false0n == 0;// ↪ trueUmNumber e umBigInt podem ser comparado normalmente.
1n < 2;// ↪ true2n > 1;// ↪ true2 > 2;// ↪ false2n > 2;// ↪ false2n >= 2;// ↪ trueEles podem ser misturados emarrays e ordenados.
const mixed = [4n, 6, -12n, 10, 4, 0, 0n];// ↪ [4n, 6, -12n, 10, 4, 0, 0n]mixed.sort();// ↪ [-12n, 0, 0n, 10, 4n, 4, 6]Observe que comparações comBigInts envolvidos emObject atuam com outros objetos, indicando somente a igualdade onde a mesma instância do objeto é comparada.
0n === Object(0n); // falseObject(0n) === Object(0n); // falseconst o = Object(0n);o === o; // trueCondicionais
ABigInt comporta-se comoNumber nos casos onde ele é convertido para umBoolean: através da funçãoBoolean; quando usado com operadores lógicosLogical Operators||,&&, e!; ou dentro de um teste condicional como umif statement.
if (0n) { console.log("Olá de um if!");} else { console.log("Olá de um else!");}// ↪ "Olá de um else!"0n || 12n;// ↪ 12n0n && 12n;// ↪ 0nBoolean(0n);// ↪ falseBoolean(12n);// ↪ true!12n;// ↪ false!0n;// ↪ trueMétodos
BigInt.asIntN()Limita um BigInt entre -2expoente-1 e 2expoente-1-1
BigInt.asUintN()Limita um BigInt entre 0 e 2expoente-1
Propriedades
BigInt.prototypePermite a adição de propriedades a um objeto
BigInt.
InstânciasBigInt
Todas as instânciasBigInt são herdades de BigInt.prototype. O protótipo do objeto do construtor do BigInt pode ser modificado para afetar todas as instâncias deBigInt.
Métodos
Exemplos
>Calculando números primos
function isPrime(p) { for (let i = 2n; i * i <= p; i++) { if (p % i === 0n) return false; } return true;}// Toma um BigInt como argumento e retorna um BigIntfunction nthPrime(nth) { let maybePrime = 2n; let prime = 0n; while (nth >= 0n) { if (isPrime(maybePrime)) { nth -= 1n; prime = maybePrime; } maybePrime += 1n; } return prime;}nthPrime(20n);// ↪ 73n