JavaScript中的BigInt类型及其应用
字数 451 2025-11-08 20:56:49
JavaScript中的BigInt类型及其应用
描述
BigInt是ES2020引入的新数据类型,用于表示大于2^53-1的整数(即超出Number的安全整数范围)。BigInt通过数字后加n或调用BigInt()函数创建,支持大整数运算且保持精度,解决了数值计算中的溢出问题。
为什么需要BigInt
- Number类型使用64位浮点数格式,安全整数范围仅为-2^53+1到2^53-1(即±9007199254740991)
- 超出范围的整数运算会丢失精度,例如:
console.log(9007199254740992 === 9007199254740993); // true(错误结果)
创建BigInt的两种方式
- 字面量形式:直接在后缀加n
const big1 = 9007199254740993n; const big2 = -0x1fffffffffffffn; // 十六进制 - 函数调用形式:BigInt()转换
const big3 = BigInt("9007199254740993"); const big4 = BigInt(Number.MAX_SAFE_INTEGER); // 9007199254740991n
运算规则与特性
- 支持常规算术运算(+、-、*、**、%),但除法会取整:
5n / 2n; // 2n(不是2.5) - 不能与Number混合运算,需显式转换:
// 错误示例 1n + 2; // TypeError // 正确做法 Number(1n) + 2; // 3 BigInt(2) + 1n; // 3n - 比较运算符可跨类型使用:
1n < 2; // true 1n == 1; // true(宽松相等) 1n === 1; // false(严格相等因类型不同)
实际应用场景
- 高精度时间戳处理:
const timestamp = BigInt(Date.now()) * 1000000n; - 大整数ID计算(如数据库主键):
const id = BigInt("9007199254740993015"); // 社交平台的大ID - 数学库实现(斐波那契数列大数版):
function fibonacci(n) { let a = 0n, b = 1n; for (let i = 2n; i <= n; i++) { [a, b] = [b, a + b]; } return b; } console.log(fibonacci(100n)); // 354224848179261915075n
注意事项
- JSON序列化需自定义处理(BigInt不能直接序列化):
BigInt.prototype.toJSON = function() { return this.toString(); }; JSON.stringify({ id: 9007199254740993n }); // "{"id":"9007199254740993"}" - 浏览器兼容性检查:
typeof BigInt === 'function' ? "支持" : "不支持";