下面给你一份 2025 最新版本、含示例代码、深入原理分析 的
《JavaScript 使用 BigInt 处理超大数值全指南》
BigInt 是处理 超过 Number 安全范围的大数计算 的最佳方式,特别适合:
- 金融系统(金额精确计算)
- 加密算法
- 大整数科学计算
- 处理超过 64 位整数的 ID(如雪花算法 ID)
- 精确大数相加 / 相减 / 相乘 / 相除
本指南从基础到进阶,全部搞懂!
🔥 一、为什么需要 BigInt?
JavaScript 原生 Number 使用 双精度浮点数(64 位),最大安全整数为:
Number.MAX_SAFE_INTEGER === 9007199254740991
超过这个数会发生 精度丢失:
9007199254740991 + 1 // 9007199254740992
9007199254740991 + 2 // 9007199254740992 ❌ 精度出错!
所以大型项目常见 bug:
- 金额丢失精度
- 后端雪花 ID 被前端截断
- 大数计算错误
👉 解决方案:BigInt
🚀 二、BigInt 的使用方法
1. 创建 BigInt
① 使用 n 后缀
const big = 123456789123456789n;
② 使用 BigInt() 函数
const big = BigInt("123456789123456789");
两者作用相同。
🚀 三、BigInt 支持的运算符
所有常用运算都可用:
加、减、乘、除、幂、取模
✔ 加法
10n + 20n // 30n
✔ 减法
30n - 10n // 20n
✔ 乘法
10n * 20n // 200n
✔ 除法(向下取整!)
7n / 2n // 3n (不会产生小数)
✔ 幂运算
2n ** 100n
✔ 取模
10n % 3n // 1n
🚧 四、BigInt 的严格限制(必须记住 ❗)
❌ BigInt 不能和 Number 混合运算
10n + 1 // ❌ TypeError
必须显式转换:
10n + BigInt(1) // ✔
❌ BigInt 不支持浮点数
BigInt(1.23) // ❌ 报错
❌ BigInt / Number 的比较规则不同
10n === 10 // false
10n == 10 // true(值相等)
🎯 五、BigInt 的类型判断
typeof 123n // "bigint"
🔧 六、BigInt 与 Number 的转换
BigInt ➜ Number
Number(123n) // 123
⚠️ 如果 BigInt 非常大,会溢出!
Number ➜ BigInt
BigInt(123) // 123n
🧮 七、BigInt 实战示例
⭐ 示例 1:处理超大订单编号(雪花 ID)
const id = BigInt("9223372036854775808");
console.log(id + 2n);
⭐ 示例 2:精确金额计算(避免浮点误差)
传统写法浮点误差:
0.1 + 0.2 // 0.30000000000000004 ❌
BigInt 金额:以分为单位(强烈推荐)
const a = 10n; // 10 分
const b = 20n; // 20 分
const c = a + b; // 30n 分
⭐ 示例 3:计算超大阶乘(1000!)
function factorial(n) {
let result = 1n;
for (let i = 1n; i <= n; i++) {
result *= i;
}
return result;
}
console.log(factorial(1000n));
⭐ 示例 4:大整数幂计算(加密算法常用)
const result = 123456789n ** 50n;
💡 八、BigInt 与 JSON 的兼容问题
JSON 不支持 BigInt!
JSON.stringify(123n) // ❌ 报错
解决方案:
方法 1:序列化为字符串
JSON.stringify({ id: "123456789123456789" });
方法 2:自定义 JSON 替代方案(推荐)
const obj = { id: 123456789123456789n };
const json = JSON.stringify(obj, (_, v) =>
typeof v === "bigint" ? v.toString() : v
);
console.log(json); // {"id":"123456789123456789"}
📌 九、BigInt 的最佳实践总结
| 场景 | BigInt 是否适合? |
|---|---|
| 超大 ID(雪花 ID) | ✔ 强烈推荐 |
| 金额运算(使用分) | ✔ 无误差 |
| 科学计算 | ✔ |
| 加密算法 | ✔ |
| JSON 交互 | ❌ 必须转换 |
| 浮点数计算 | ❌ 不支持小数 |
发表回复