JavaScriptNombres et Math

BigInt

Un type pour des calculs exacts sur des nombres entiers de taille arbitraire. Les littéraux se terminent par la lettre n.

Renvoie
Une valeur de type bigint.
Sur cette page

Exemple

#
JavaScript
const big = 9007199254740993n

console.log(9007199254740993)
console.log(big)
console.log(big + 2n)
console.log(typeof big)
Console
9007199254740992
9007199254740993n
9007199254740995n
bigint

Le nombre ordinaire 9007199254740993 se situe hors de la plage des nombres exacts, donc JavaScript l’a stocké comme la valeur possible la plus proche, soit 9007199254740992.

Définition et utilisation

#

Les nombres ordinaires en JavaScript (type number) ne sont exacts que jusqu’à Number.MAX_SAFE_INTEGER, soit 9007199254740991. Au-delà de cette limite, ils perdent en précision et les entiers voisins commencent à se confondre. BigInt est un type primitif à part, qui stocke des entiers de taille quelconque sans perte de précision.

Vous créez une valeur BigInt en ajoutant n à un nombre (10n), ou avec la fonction BigInt(), qui accepte un entier ou une chaîne de chiffres. Les opérateurs habituels +, -, *, ** et % fonctionnent, et la division / tronque la partie décimale. typeof 10n renvoie "bigint".

Impossible de mélanger les types dans une même opération : 10n + 1 lève une TypeError, donc l’autre valeur doit être explicitement convertie avec BigInt() ou Number(). BigInt ne fonctionne pas avec les fonctions de Math, et JSON.stringify() lève une erreur pour ce type. Les comparaisons, comme 10n > 5 ou 2n == 2, fonctionnent entre les types, mais 2n === 2 renvoie false, car les types diffèrent.

Syntaxe

#
Syntaxe
123n
BigInt(value)

Paramètres

#
  • value

    entier ou chaîne de caractères

    La valeur convertie en BigInt. Un nombre avec une partie décimale lève RangeError, et une chaîne qui n’est pas un entier lève SyntaxError.

Plus d’exemples

#
La limite des entiers sûrs
JavaScript
const max = Number.MAX_SAFE_INTEGER

console.log(max)
console.log(max + 1 === max + 2)
console.log(BigInt(max) + 1n === BigInt(max) + 2n)
Console
9007199254740991
true
false
Mélange de types et division
JavaScript
try {
  console.log(10n + 1)
} catch (error) {
  console.log(error.name)
}

console.log(10n + BigInt(1))
console.log(7n / 2n)
console.log(Number(7n) / 2)
Console
TypeError
11n
3n
3.5
De grands résultats sans perdre de chiffres
JavaScript
function factorial(n) {
  let result = 1n
  for (let i = 2n; i <= n; i++) {
    result *= i
  }
  return result
}

console.log(factorial(25n))
console.log(Number(factorial(25n)))
Console
15511210043330985984000000n
1.5511210043330986e+25

Compatibilité des navigateurs

#

Largement disponible · depuis 2020

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Conservez les identifiants venant de bases de données et d’API qui dépassent Number.MAX_SAFE_INTEGER sous forme de chaînes ou de BigInt. Les convertir en nombre ordinaire change silencieusement les derniers chiffres.
  • Avant d’envoyer des données en JSON, convertissez BigInt en chaîne, par ex. avec value.toString(). JSON.stringify() ne gère pas ce type et lève une TypeError.
  • BigInt n’a pas de partie décimale. Stockez les montants en centimes et rappelez-vous que la division tronque toujours le résultat à un entier.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.