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.
Exemple
#const big = 9007199254740993n
console.log(9007199254740993)
console.log(big)
console.log(big + 2n)
console.log(typeof big)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
#123n
BigInt(value)Paramètres
#value
entier ou chaîne de caractères
La valeur convertie enBigInt. Un nombre avec une partie décimale lèveRangeError, et une chaîne qui n’est pas un entier lèveSyntaxError.
Plus d’exemples
#const max = Number.MAX_SAFE_INTEGER
console.log(max)
console.log(max + 1 === max + 2)
console.log(BigInt(max) + 1n === BigInt(max) + 2n)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)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)))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_INTEGERsous forme de chaînes ou deBigInt. Les convertir en nombre ordinaire change silencieusement les derniers chiffres. - Avant d’envoyer des données en JSON, convertissez
BigInten chaîne, par ex. avecvalue.toString().JSON.stringify()ne gère pas ce type et lève uneTypeError. BigIntn’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
#- Number.isInteger()Vérifie si une valeur est un nombre entier.
- typeofRenvoie une chaîne avec le nom du type d’une valeur, par ex. "number", "string" ou "object".
- Number.prototype.toString()Convertit un nombre en chaîne de caractères, y compris dans un autre système de numération, comme le binaire ou l’hexadécimal.
- JSON.stringify()Transforme une valeur JavaScript, comme un objet ou un tableau, en chaîne de caractères au format JSON.
- Math.pow()Élève un nombre à une puissance.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.