目前不支持Safari及IE

在JavaScript中,Number能表示的最大数字为 ±253 - 1

1
2
const max = Number.MAX_SAFE_INTEGER        // =>  9007199254740991
const min = Number.MIN_SAFE_INTEGER // => -9007199254740991

如果要做超出此范围的计算,则可能会导致意想不到的结果

1
2
3
4
5
const max = Number.MAX_SAFE_INTEGER;

max // => 9007199254740991
max + 2 // => 9007199254740992,错误
max * 3 // => 27021597764222972,错误

BigInt

BigInt是一个内置的对象,用来表示比Number.MAX_SAFE_INTEGER更大的整数

通过使用BigInt,即使超出Number的安全整数限制,也可以安全地存储和操作大整数

在一个数字字面量后面添加n或者直接调用BigInt()都可以创建一个BigInt

1
2
3
4
5
6
7
8
9
10
11
const bignum1 = 1n;
console.log(bignum1); // => 1n
--------------------------------------------------
const maxInt = BigInt(Number.MAX_SAFE_INTEGER);
console.log(maxInt); // => 9007199254740991n
--------------------------------------------------
const binInt = BigInt(0b1010);
console.log(binInt); // => 10n
--------------------------------------------------
const stringInt = BigInt('1234');
console.log(stringInt); // => 1234n

BigInt()不是构造函数,不需要使用new

相关操作

两个BigInt之间可以使用加减乘除以及位运算等运算符,但BigIntNumber之间则不行

1
2
3
4
1n + 1n                                // => 2n
typeof 1n // => bigint
-----------------------------------------------------
BigInt(Number.MAX_SAFE_INTEGER) + 2n // => 9007199254740993n
1
2
1n + 1
// Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions

相同数值的BigIntNumber并不严格相等

1
2
1n === 1                               // => false
1n == 1 // => true

BigIntNumber可以比较大小

1
2
1n > 2                                 // => false
2n > 1 // => true