BigInt στο JavaScript

JavaScript BigInt variables are used to store large integer values that are too large to be represented by ordinary JavaScript numbers.

JavaScript integer precision

JavaScript integers can only be precise up to 15 digits:

Integer precision

let x = 999999999999999;
let y = 9999999999999999;

Δοκιμάστε προσωπικά

In JavaScript, all numbers are stored in 64-bit floating-point format (IEEE 754 standard).

According to this standard, large integers cannot be represented accurately and will be rounded.

Therefore, JavaScript can only safely represent integers within the following range:

  • Maximum is 9007199254740991(253-1) )
  • Minimum is -9007199254740991(- (253-1) )

Integer values outside this range will lose precision.

How to create BigInt

To create BigInt, you can add n, or call BigInt() Function:

Example 1

let x = 9999999999999999;
let y = 9999999999999999n;

Δοκιμάστε προσωπικά

Example 2

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

Δοκιμάστε προσωπικά

BigInt: A new JavaScript data type

The JavaScript type of BigInt is "bigint:

Example

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

Δοκιμάστε προσωπικά

BigInt is the second numeric data type in JavaScript (after Number).

For BigInt, JavaScript supports a total of 8 data types:

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

BigInt operators

Operators that can be used with JavaScript Number can also be used with BigInt.

BigInt multiplication example

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

Δοκιμάστε προσωπικά

Λήψη υπόψη

Δεν επιτρέπεται η αριθμητική πράξη μεταξύ BigInt και Number (η μετατροπή τύπου θα χάσει πληροφορίες).

Το BigInt δεν μπορεί να εκτελέσει τη μετακίνηση στα δεξιά χωρίς να γεμίσει (>>>), επειδή δεν έχει σταθερή πλάτος.

Μηδενικά σημεία του BigInt

Το BigInt δεν μπορεί να έχει μηδενικά σημεία.

Παράδειγμα διαιρέσεως του BigInt

let x = 5n;
let y = x / 2;
// Error: Cannot mix BigInt and other types, use explicit conversion.
let x = 5n;
let y = Number(x) / 2;

Δοκιμάστε προσωπικά

Εξαδcimal, οκταδcimal και δυαδικό σύστημα γραφής του BigInt

Το BigInt μπορεί να γραφτεί σε εξαδcimal, οκταδcimal ή δυαδικό σύστημα γραφής:

Παράδειγμα του BigInt σε εξαδcimal

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

Δοκιμάστε προσωπικά

Περιέργεια Πρόσφορης Τελικής Ακρίβειας

Η αναγνώριση μπορεί να απειλήσει την ασφάλεια του προγράμματος:

Παράδειγμα του MAX_SAFE_INTEGER

9007199254740992 === 9007199254740993; // Γίνεται true !!!

Δοκιμάστε προσωπικά

Υποστήριξη προγραμμάτων περιήγησης

Από τον Σεπτέμβριο του 2020, όλα τα προγράμματα περιήγησης υποστηρίζουν BigInt:

Chrome Edge Firefox Safari Opera
Chrome 67 Edge 79 Firefox 68 Safari 14 Opera 54
Μάιος 2018 Ιανουάριος 2020 Ιούλιος 2019 Σεπτέμβριος 2020 Ιούνιος 2018

Μικρότερος και μεγαλύτερος ασφαλής ακέραιος

ES6 έχει προσθέσει τις ιδιότητες max και min στον τύπο Number:

  • MAX_SAFE_INTEGER
  • MIN_SAFE_INTEGER

Παράδειγμα του MAX_SAFE_INTEGER

let x = Number.MAX_SAFE_INTEGER;

Δοκιμάστε προσωπικά

Παράδειγμα του MIN_SAFE_INTEGER

let x = Number.MIN_SAFE_INTEGER;

Δοκιμάστε προσωπικά

Νέες αριθμητικές μεθόδους

ES6 έχει προσθέσει δύο νέες μεθόδους στον τύπο Number:

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

Μέθοδος Number.isInteger()

Αν το όρισμα είναι ακέραιος, η μέθοδος Number.isInteger() επιστρέφει true.

Παράδειγμα isInteger()

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

Δοκιμάστε προσωπικά

Μέθοδος Number.isSafeInteger()

Τα ασφαλή ακέραια είναι ακέραιοι που μπορούν να εκφραστούν με ακρίβεια ως διπλή ακρίβεια.

Αν το όρισμα είναι ασφαλές ακέραιο, η μέθοδος Number.isSafeInteger() επιστρέφει true.

Παράδειγμα isSafeInteger()

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

Δοκιμάστε προσωπικά

Τα ασφαλή ακέραια είναι από -(253 Παράδειγμα - 1) έως +(253 Παράδειγμα - 1) όλων των ακέραιων.

Αυτό είναι ένα ασφαλές ακέραιο: 9007199254740991. Αυτό δεν είναι ένα ασφαλές ακέραιο: 9007199254740992.