BigInt JavaScript

Les variables BigInt JavaScript sont utilisées pour stocker des valeurs d'entiers trop grandes pour être représentées par des nombres JavaScript ordinaires.

Précision des entiers JavaScript

Les entiers JavaScript peuvent être précis au maximum jusqu'à 15 chiffres :

Précision des entiers

let x = 999999999999999;
let y = 9999999999999999;

Essayez-le vous-même

Dans JavaScript, tous les nombres sont stockés sous forme de format de point flottant de 64 bits (norme IEEE 754).

Selon ce critère, les grands entiers ne peuvent pas être représentés avec précision et sont arrondis.

Par conséquent, JavaScript ne peut représenter précisément les entiers dans la plage suivante :

  • le plus grand est 9007199254740991(253-1)
  • le plus petit est -9007199254740991(-(253-1))

Les valeurs entières hors de cette gamme perdront leur précision.

Comment créer un BigInt

Pour créer un BigInt, vous pouvez ajouter nou appeler BigInt() Fonction :

Exemple 1

let x = 9999999999999999;
let y = 9999999999999999n;

Essayez-le vous-même

Exemple 2

let x = 1234567890123456789012345n;
let y = BigInt(1234567890123456789012345);

Essayez-le vous-même

BigInt : un nouveau type de données JavaScript

Le type JavaScript de BigInt est "bigint

Exemple

let x = BigInt(999999999999999);
let type = typeof x;

Essayez-le vous-même

BigInt est le deuxième type de données numériques dans JavaScript (après Number).

Pour BigInt, le nombre total de types de données pris en charge par JavaScript est de 8 :

  1. String
  2. Number
  3. Bigint
  4. Boolean
  5. Undefined
  6. Null
  7. Symbol
  8. Object

Opérateurs BigInt

Les opérateurs utilisables pour Number JavaScript peuvent également être utilisés pour BigInt.

Exemple de multiplication BigInt

let x = 9007199254740995n;
let y = 9007199254740995n;
let z = x * y;

Essayez-le vous-même

Remarque

Il n'est pas autorisé de réaliser des opérations arithmétiques (conversion de type) entre BigInt et Number (l'information peut être perdue lors de la conversion).

BigInt ne peut pas effectuer l'opération de déplacement de bits à droite sans signe (>>>), car il n'a pas de largeur fixe.

Décimales de BigInt

BigInt ne peut pas avoir de décimales.

Exemple de division BigInt

let x = 5n;
let y = x / 2;
// Erreur : Ne pas mélanger BigInt et autres types, utiliser la conversion explicite.
let x = 5n;
let y = Number(x) / 2;

Essayez-le vous-même

Hexadécimal, octal et binaire de BigInt

BigInt peut également être écrit sous forme hexadécimale, octale ou binaire :

Instance hexadécimale de BigInt

let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;

Essayez-le vous-même

Curiosité sur la précision

L'arrondi peut compromettre la sécurité du programme :

Instance de MAX_SAFE_INTEGER

9007199254740992 === 9007199254740993; // C'est vrai !!!

Essayez-le vous-même

Prise en charge du navigateur

Depuis septembre 2020, tous les navigateurs prennent en charge BigInt :

Chrome Edge Firefox Safari Opera
Chrome 67 Edge 79 Firefox 68 Safari 14 Opera 54
Mai 2018 Janvier 2020 Juillet 2019 Septembre 2020 Juin 2018

Minimum et maximum des entiers sécurisés

ES6 ajoute également les propriétés max et min à l'objet Number :

  • MAX_SAFE_INTEGER
  • MIN_SAFE_INTEGER

Instance de MAX_SAFE_INTEGER

let x = Number.MAX_SAFE_INTEGER;

Essayez-le vous-même

Instance de MIN_SAFE_INTEGER

let x = Number.MIN_SAFE_INTEGER;

Essayez-le vous-même

Nouvelles méthodes numériques

ES6 ajoute également deux nouvelles méthodes à l'objet Number :

  • Number.isInteger()
  • Number.isSafeInteger()

Méthode Number.isInteger()

Si le paramètre est un entier, la méthode Number.isInteger() retourne true.

Exemple de isInteger()

Number.isInteger(10);
Number.isInteger(10.5);

Essayez-le vous-même

Méthode Number.isSafeInteger()

Les entiers sécurisés sont des entiers qui peuvent être représentés avec précision comme des nombres à double précision.

Si le paramètre est un entier sécurisé, la méthode Number.isSafeInteger() retourne true.

Exemple de isSafeInteger()

Number.isSafeInteger(10);
Number.isSafeInteger(12345678901234567890);

Essayez-le vous-même

Les entiers sécurisés sont ceux de -(253 de -1) à +253 Tous les entiers de -1) .

Ceci est un entier sécurisé : 9007199254740991. Ce n'est pas un entier sécurisé : 9007199254740992.