菜鸟-创作你的创作

JavaScript使用BigInt处理超大数值全指南

下面给你一份 2025 最新版本、含示例代码、深入原理分析

《JavaScript 使用 BigInt 处理超大数值全指南》

BigInt 是处理 超过 Number 安全范围的大数计算 的最佳方式,特别适合:

本指南从基础到进阶,全部搞懂!


🔥 一、为什么需要 BigInt?

JavaScript 原生 Number 使用 双精度浮点数(64 位),最大安全整数为:

Number.MAX_SAFE_INTEGER === 9007199254740991

超过这个数会发生 精度丢失

9007199254740991 + 1   // 9007199254740992
9007199254740991 + 2   // 9007199254740992 ❌ 精度出错!

所以大型项目常见 bug:

👉 解决方案: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 交互❌ 必须转换
浮点数计算❌ 不支持小数
退出移动版