Understanding BigInt in JavaScript
Md Nazmus Sakib
Posted on September 10, 2024
In JavaScript, numbers have traditionally been represented using the Number
type, which adheres to the IEEE 754 standard for double-precision floating-point arithmetic. This representation, while versatile, has a limitation: it can safely represent integers only up to (2^{53} - 1) (or (9,007,199,254,740,991)). For applications requiring larger integers, JavaScript introduces a solution through the BigInt
type.
What is BigInt
?
BigInt
is a built-in object in JavaScript that provides a way to represent whole numbers larger than those that can be handled by the Number
type. Unlike Number
, which is suitable for floating-point arithmetic and can handle values between approximately (-1.8 \times 10^{308}) and (1.8 \times 10^{308}), BigInt
is designed specifically for arbitrary-precision integer arithmetic.
Creating BigInt
Values
There are a couple of ways to create BigInt
values:
- Using the BigInt Constructor:
const bigIntValue = BigInt(123456789012345678901234567890);
Note that BigInt
accepts strings and numbers, but when using numbers, they should be within the range of a Number
type.
-
Using the BigInt Literal:
BigInt literals are suffixed with an
n
:
const bigIntLiteral = 123456789012345678901234567890n;
This is a more concise way to define BigInt
values directly.
Operations with BigInt
BigInt
supports most of the standard arithmetic operators. Here’s a brief overview:
-
Addition (
+
)
const a = 10n;
const b = 20n;
const sum = a + b; // 30n
-
Subtraction (
-
)
const difference = b - a; // 10n
-
Multiplication (
*
)
const product = a * b; // 200n
-
Division (
/
)
const quotient = b / 3n; // 6n (Note: Division results in a `BigInt` which is truncated towards zero)
-
Modulus (
%
)
const remainder = b % 3n; // 2n
- Exponentiation (``)**
const power = a ** 3n; // 1000n
Comparisons and Equality
BigInt
can be compared using the standard comparison operators. Note that BigInt
values and Number
values are not directly comparable:
const a = 10n;
const b = 10;
console.log(a == b); // false
console.log(a === BigInt(b)); // true
Converting Between BigInt
and Number
Conversion between BigInt
and Number
can be done using explicit conversion methods:
-
From
BigInt
toNumber
:
const bigIntValue = 123n;
const numberValue = Number(bigIntValue);
Note: This can lose precision if the BigInt
value is too large.
-
From
Number
toBigInt
:
const numberValue = 123;
const bigIntValue = BigInt(numberValue);
Limitations and Considerations
-
Mixed Operations:
You cannot mix
BigInt
andNumber
in arithmetic operations without explicit conversion:
const a = 10n;
const b = 5;
// The following line will throw a TypeError
const result = a + b;
-
JSON Support:
BigInt
is not supported in JSON serialization directly. Attempting to stringifyBigInt
values will result in a TypeError:
const bigIntValue = 123n;
JSON.stringify(bigIntValue); // Throws TypeError
To handle BigInt
in JSON, you may need to convert it to a string first:
const bigIntValue = 123n;
const jsonString = JSON.stringify({ value: bigIntValue.toString() });
-
Performance:
While
BigInt
offers arbitrary precision, it can be slower compared toNumber
operations due to the complexity of handling larger integers.
Use Cases
BigInt
is particularly useful in scenarios where precision with large integers is crucial, such as:
- Cryptography
- Large-scale computations (e.g., financial applications)
- High-precision arithmetic in scientific calculations
Conclusion
BigInt
is a powerful addition to JavaScript, expanding its capabilities for handling integers beyond the limits of the Number
type. Understanding its operations, limitations, and appropriate use cases can help in leveraging its benefits for applications requiring large integer calculations.
Posted on September 10, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
October 6, 2024