I just came across JavaScript's new data type BigInt
. What are some of the real-time use cases where we have to use BigInt
vs Number
?
I also see that it doesn't have cross-browser compatibility at this point.
I just came across JavaScript's new data type BigInt
. What are some of the real-time use cases where we have to use BigInt
vs Number
?
I also see that it doesn't have cross-browser compatibility at this point.
BigInt
is a built-in object that provides a way to represent whole numbers larger than 2^53 - 1, which is the largest number JavaScript can reliably represent with theNumber
primitive and represented by theNumber.MAX_SAFE_INTEGER
constant.BigInt
can be used for arbitrarily large integers.
Difference:
BigInt
cannot be used with methods in the built-in Math
object and cannot be mixed with instances of Number
in operationsNumber
and BigInt
can lead to loss of
precision, it is recommended to only use BigInt
when values greater
than 2^53 are reasonably expected and not to coerce between the two
types.The Number object uses a 64-bit floating-point format. With 64 bits allocated in memory, you have a sign bit, 11 bits for exponent, and 52 bits for the mantissa. Since you only have 52 bits to represent the mantissa, you can only safely represent integers between -(2^53 - 1) and 2^53 - 1. So what does this mean for Number and how does BigInt address it? Examples are usually helpful:
const nval1 = 9007199254740991 + 1
const nval2 = 9007199254740991 + 2
nval1 === nval2
# => true
Clearly, by using the comparison operator with numbers that extend beyond Number.MAX_SAFE_INTEGER
leads to some unexpected results. Now let's try it with BigInt:
const bval1 = 9007199254740991n + 1n
const bval2 = 9007199254740991n + 2n
bval1 === bval2
# => false
In terms of practical use, BigInt was added to ES2020 to allow the representation of 64-bit integers, which are required for compatibility with many other programming languages and APIs.
The differences between BigInt
and Number
:
Number |
BigInt |
|
---|---|---|
Safe Range | Number.MAX_SAFE_INTEGER loses precision outside this range |
Extremely large integers |
Math | Supports Math object |
basic arithmetic operations + * - % ** |
Decimal vs. Integer | integers and decimals 1.00, 2.56 |
only integers 1n, 2n and 5n / 2 === 2n |
Syntax | No special syntax | Append n to the end, new BigInt('100') |
Type Conversion | Automatically converts Number to BigInt in operations |
Requires explicit conversion to Number for arithmetic with Number values |
JSON | Supports by default | Not serializable by default |
Use BigInt when you need to work with extremely large integers or require precise integer arithmetic without any loss of precision.