JavaScript 中 BigInt 的使用与特性

BigInt
是 JavaScript 中的一种内置对象,用于表示大于 2^53 - 1
(即 Number.MAX_SAFE_INTEGER
)的整数。由于 JavaScript 的 Number
类型使用双精度浮点数表示,因此它只能安全地表示 -(2^53 - 1)
到 2^53 - 1
之间的整数。超出这个范围的整数在 Number
类型中会失去精度,而 BigInt
则可以用来精确表示和操作任意大小的整数。
创建 BigInt
你可以通过在整数后面加上 n
后缀来创建一个 BigInt
,或者使用 BigInt()
构造函数。
const bigInt1 = 1234567890123456789012345678901234567890n;
const bigInt2 = BigInt("1234567890123456789012345678901234567890");
BigInt
的操作
BigInt
支持大多数与 Number
相同的操作符,如 +
, -
, *
, /
, %
, **
等。但是,BigInt
不能与 Number
直接混合运算,必须先将 Number
转换为 BigInt
。
const a = 123n;
const b = 456n;
const sum = a + b; // 579n
const product = a * b; // 56088n
const remainder = a % b; // 123n
BigInt
与 Number
的区别
- 精度:
BigInt
可以表示任意大小的整数,而Number
只能安全表示-(2^53 - 1)
到2^53 - 1
之间的整数。 - 类型:
BigInt
是bigint
类型,而Number
是number
类型。 - 运算:
BigInt
不能与Number
直接混合运算,必须显式转换。 - 方法:
BigInt
不支持Math
对象中的方法,如Math.pow()
、Math.sqrt()
等。
使用场景
BigInt
主要用于需要处理大整数的场景,例如:
- 加密算法
- 大整数计算
- 高精度数学运算
注意事项
BigInt
不能与Number
直接混合运算,必须显式转换。BigInt
不支持Math
对象中的方法。BigInt
不能用于JSON.stringify()
,因为JSON
标准不支持BigInt
类型。
示例
const maxSafeInteger = Number.MAX_SAFE_INTEGER; // 9007199254740991
const bigIntValue = BigInt(maxSafeInteger) + 1n; // 9007199254740992n
console.log(bigIntValue); // 9007199254740992n
总之,BigInt
是 JavaScript 中处理大整数的重要工具,尤其在需要高精度计算的场景中非常有用。