| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/BigInt | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis septembre 2020.
BigInt reprsente des valeurs entires qui sont trop leves ou trop faibles pour tre reprsentes par le type primitif number.
Une valeur BigInt, parfois simplement appele BigInt, est un bigint primitif, cre en ajoutant un n la fin d'un littral d'entier, ou en appelant la fonction BigInt() (sans l'oprateur new) et en lui fournissant une valeur entire ou une chane de caractres.
const plusGrandEntier = 9007199254740991n;
const grandNombre = BigInt(9007199254740991);
// 9007199254740991n
const grandNombreEnChane = BigInt("9007199254740991");
// 9007199254740991n
const grandeNombreHexa = BigInt("0x1fffffffffffff");
// 9007199254740991n
const grandNombreOctal = BigInt("0o377777777777777777");
// 9007199254740991n
const grandeNombreBinaire = BigInt(
"0b11111111111111111111111111111111111111111111111111111",
);
// 9007199254740991n
Les valeurs BigInt sont similaires aux valeurs Number sur certains aspects, mais diffrent aussi sur quelques points cls : les valeurs BigInt ne peuvent pas tre utilises avec les mthodes de l'objet natif Math et ne peuvent pas tre mlanges avec des valeurs Number dans des oprations ; elles doivent tre corces au mme type. Faites toutefois attention lors de la coercition entre ces types, car la prcision d'une valeur BigInt peut tre perdue lorsqu'elle est convertie en valeur Number.
Lorsqu'on utilise typeof sur une valeur BigInt, cet oprateur donne "bigint" :
typeof 1n === "bigint"; // true
typeof BigInt("1") === "bigint"; // true
Un BigInt peut tre galement envelopp dans un Object :
typeof Object(1n) === "object"; // true
La plupart des oprateurs prennent en charge les BigInt, toutefois la plupart n'autorisent pas des oprandes de types mixtes les deux oprandes doivent tre des BigInt ou aucun ne doit l'tre :
+, -, *, /, %, **>>, <<, &, |, ^, ~-)++, --Les oprateurs qui retournent un boolen permettent de mlanger des valeurs Number et BigInt comme oprandes :
>, <, >=, <=, ==, !=, ===, !==Quelques oprateurs ne prennent pas du tout en charge BigInt :
+) ne peut pas tre pris en charge en raison d'un usage conflictuel dans asm.js, il a donc t laiss de ct pour ne pas casser asm.js (angl.).>>>) est le seul oprateur binaire non pris en charge, car toute valeur BigInt est signe.Cas particuliers :
+) impliquant une chane de caractres et un BigInt retourne une chane de caractres./) tronque les composantes fractionnaires vers zro, car BigInt ne peut pas reprsenter de quantits fractionnaires.const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER); // 9007199254740991n
const maxPlusOne = previousMaxSafe + 1n; // 9007199254740992n
const theFuture = previousMaxSafe + 2n; // 9007199254740993n, cela fonctionne dsormais !
const prod = previousMaxSafe * 2n; // 18014398509481982n
const diff = prod - 10n; // 18014398509481972n
const mod = prod % 10n; // 2n
const bigN = 2n ** 54n; // 18014398509481984n
bigN * -1n; // -18014398509481984n
const expected = 4n / 2n; // 2n
const truncated = 5n / 2n; // 2n, pas 2.5n
Une valeur BigInt n'est pas strictement gal une valeur Number, mais elle l'est vaguement :
0n === 0; // false
0n == 0; // true
Une valeur Number et une valeur BigInt peuvent tre compares comme en temps normal :
1n < 2; // true
2n > 1; // true
2 > 2; // false
2n > 2; // false
2n >= 2; // true
On peut galement mlanger ces valeurs au sein de tableaux :
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]
mixed.sort((a, b) => a - b);
// ne fonctionne pas, car la soustraction ne
// fonctionne pas sur des types mixtes
// TypeError: can't convert BigInt value to Number value
// On peut trier avec un comparateur numrique appropri
mixed.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
// [ -12n, 0, 0n, 4n, 4, 6, 10 ]
Notez que les comparaisons entre les valeurs BigInt et les mmes valeurs, passes dans le constructeur Object(), ne sont pas quivalentes au sens strict :
Object(0n) === 0n; // false
Object(0n) === Object(0n); // false
const o = Object(0n);
o === o; // true
Parce que la coercition entre des valeurs Number et des valeurs BigInt peut entraner une perte de prcision, il est recommand :
BigInt lorsque des valeurs suprieures 253 sont raisonnablement attendues.BigInt et des valeurs Number.Une valeur BigInt suit les mmes rgles de conversion que les valeurs Number dans les cas suivants :
Boolean : avec la fonction Boolean ;||, && et ! ; ouif.Autrement dit, seule la valeur 0n est quivalente faux ; toutes les autres sont quivalentes vrai.
if (0n) {
console.log("Nous voici dans le if !");
} else {
console.log("Et nous voil dans le else !");
}
// "Et nous voil dans le else !"
0n || 12n; // 12n
0n && 12n; // 0n
Boolean(0n); // false
Boolean(12n); // true
!12n; // false
!0n; // true
Les oprations prises en charge pour les valeurs BigInt ne s'effectuent pas temps constant et sont donc sujettes des attaques temporelles. Aussi, BigInt ne saurait tre utilis des fins cryptographiques.
L'utilisation de JSON.stringify() avec une valeur BigInt entrane une exception TypeError, car ces valeurs ne sont pas srialises en JSON par dfaut. Toutefois, JSON.stringify() laisse spcifiquement une porte drobe pour les valeurs BigInt : il essaie d'appeler la mthode toJSON() de BigInt. (Il ne le fait pas pour d'autres valeurs primitives.) Par consquent, vous pouvez implmenter votre propre mthode toJSON() (ce qui est l'un des rares cas o la modification des objets intgrs n'est pas explicitement dconseille) :
BigInt.prototype.toJSON = function () {
return { $bigint: this.toString() };
};
la place de lever une exception, JSON.stringify() produit maintenant une chane de caractres comme celle-ci :
console.log(JSON.stringify({ a: 1n }));
// {"a":{"$bigint":"1"}}
Si vous ne souhaitez pas modifier BigInt.prototype, vous pouvez utiliser le paramtre replacer de JSON.stringify pour srialiser les valeurs BigInt :
function replacer(cle, valeur) {
if (cle === "big") {
return valeur.toString();
}
return valeur;
}
const donnee = {
number: 1,
big: BigInt("18014398509481982"),
};
const chaine = JSON.stringify(donnee, replacer);
console.log(chaine);
// '{"number":1,"big":"18014398509481982"}'
Si vous avez des donnes JSON contenant des valeurs dont vous savez qu'il s'agit de grands entiers, vous pouvez utiliser le paramtre reviver de la mthode JSON.parse() pour les dsrialiser :
function reviver(cle, value) {
if (cle === "big") {
return BigInt(value);
}
return value;
}
const donnee = '{"number":1,"big":"18014398509481982"}';
const deserialise = JSON.parse(donnee, reviver);
console.log(deserialise);
// {number: 1, big: 18014398509481982n}
Note :
Bien qu'il soit possible de rendre le replacer de JSON.stringify() gnrique et de srialiser correctement les valeurs BigInt pour tous les objets comme montr cidessus, le reviver de JSON.parse() doit tre utilis avec prudence, car la srialisation est irrversible : il n'est pas possible de distinguer entre un objet qui possde fortuitement une proprit appele $bigint et un vritable BigInt.
De plus, l'exemple cidessus cre un objet entier lors du remplacement et de la reconstitution, ce qui peut avoir des implications en matire de performance ou de stockage pour des objets plus volumineux contenant de nombreux BigInt. Si vous connaissez la structure de la charge utile, il peut tre prfrable de simplement les srialiser sous forme de chanes de caractres et de les reconstituer en fonction du nom de la cl de proprit.
En fait, JSON permet d'utiliser des nombres de longueur arbitraire ; mais ils ne peuvent pas tre analyss avec une prcision totale en JavaScript. Si vous communiquez avec un autre programme dans un langage qui prend en charge des entiers plus longs (comme les entiers 64 bits) et que vous souhaitez transmettre le BigInt sous la forme d'un nombre JSON plutt que d'une chane de caractres JSON, voir Srialisation des nombres sans perte.
BigInt()Cre une nouvelle valeur BigInt.
BigInt.asIntN()Tronque une valeur BigInt au nombre donn de bits les moins significatifs et retourne cette valeur en tant qu'entier sign.
BigInt.asUintN()Tronque une valeur BigInt au nombre donn de bits les moins significatifs et retourne cette valeur en tant qu'entier non sign.
Ces proprits sont dfinies sur BigInt.prototype et sont partages par toutes les instances de BigInt.
BigInt.prototype.constructorLa fonction constructeur qui a cr une instance de l'objet. Pour les instances BigInt, la valeur initiale est le constructeur BigInt.
BigInt.prototype[Symbol.toStringTag]La valeur initiale de la proprit [Symbol.toStringTag] est la chane de caractres "BigInt". Cette proprit est utilise dans Object.prototype.toString(). Cependant, comme BigInt possde galement sa propre mthode toString(), cette proprit n'est utilise que si vous appelez Object.prototype.toString.call() avec un BigInt comme thisArg.
BigInt.prototype.toLocaleString()Retourne une chane de caractres avec une reprsentation localise de la valeur BigInt. Il s'agit d'une surcharge de la mthode Object.prototype.toLocaleString().
BigInt.prototype.toString()Retourne une chane de caractres avec une reprsentation de la valeur BigInt dans la base donne. Il s'agit d'une surcharge de la mthode Object.prototype.toString().
BigInt.prototype.valueOf()Retourne la valeur BigInt. Il s'agit d'une surcharge de la mthode Object.prototype.valueOf().
function isPrime(p) {
for (let i = 2n; i * i <= p; i++) {
if (p % i === 0n) return false;
}
return true;
}
// Prend une valeur BigInt comme argument
// Retourne une valeur BigInt
function nthPrime(nth) {
let maybePrime = 2n;
let prime = 0n;
while (nth >= 0n) {
if (isPrime(maybePrime)) {
nth--;
prime = maybePrime;
}
maybePrime++;
}
return prime;
}
nthPrime(20n);
// 73n
Note :
L'implmentation de isPrime() est uniquement destine la dmonstration. Pour une application relle, vous voulez utiliser un algorithme fortement mmoris tel que le Crible d'ratosthne pour viter les calculs rpts.
| Spcification |
|---|
| ECMAScript 2027 LanguageSpecification # sec-bigint-objects |
NumberNumber.MAX_SAFE_INTEGERCette page a t modifie le 19 aot 2026 par les contributeurices du MDN.
BigIntObject/FunctionObject.prototype.__defineGetter__()Object.prototype.__defineSetter__()Object.prototype.__lookupGetter__()Object.prototype.__lookupSetter__()Object.prototype.hasOwnProperty()Object.prototype.isPrototypeOf()Object.prototype.propertyIsEnumerable()Object.prototype.toLocaleString()Object.prototype.toString()Object.prototype.valueOf()Certaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |