JavaScript 处理大整数需用 BigInt 类型,它支持任意精度整数运算,但不能与 Number 自动互转或混用;创建用字面量(如123n)或 BigInt() 构造函数;转换须显式且受限;判断用 typeof === 'bigint';JSON 序列化前需转字符串。

JavaScript 中处理大整数运算,核心是使用 BigInt 类型,它专为表示任意精度的整数而设计,能安全计算远超 Number.MAX_SAFE_INTEGER(9007199254740991)范围的整数。但 BigInt 与传统 Number 类型**不能自动互转**,也不能混用在算术运算中,否则会报错。
BigInt 的创建与基本使用
BigInt 字面量以 n 结尾,或通过 BigInt() 构造函数生成:
-
123n是合法的 BigInt 字面量 -
BigInt("9007199254740992")可将字符串转为 BigInt(注意:传入小数或 Number 会报错) -
BigInt(123)合法,但BigInt(123.5)或BigInt(NaN)会抛出TypeError
BigInt 与 Number 的转换规则
两者转换必须显式进行,且有明确限制:
-
Number → BigInt:只能用
BigInt(x),且x必须是安全整数(即Number.isSafeInteger(x) === true),否则报错 -
BigInt → Number:用
Number(bigIntValue),但若 BigInt 超出Number表示范围(如大于2^53 - 1),结果会丢失精度或变为Infinity - 不支持隐式转换:例如
10n + 5、10n === 10都会报错或返回false
混合运算与类型判断技巧
避免运行时错误的关键是提前识别和统一类型:
立即学习“Java免费学习笔记(深入)”;
- 用
typeof value === 'bigint'判断是否为 BigInt(注意不是'Bigint') - 需要混合计算时,先统一转为 BigInt(推荐)或 Number(仅当确定不越界)
- 常见场景如 ID 处理、密码学运算、高精度计数器,应全程使用 BigInt,避免中途转 Number
- JSON 不支持 BigInt,序列化前需手动转成字符串:
JSON.stringify({ id: 123n }, (k, v) => typeof v === 'bigint' ? v.toString() : v)
实际注意事项
使用 BigInt 时需留意兼容性和边界行为:
- ES2020 起被广泛支持(Chrome 67+/Firefox 68+/Safari 14+),旧环境需 Babel 转译或 polyfill(但 polyfill 无法真正替代原生 BigInt 的精度保证)
- BigInt 不支持小数点、指数记法(如
1e100n无效),也不支持Math对象方法(如Math.pow) - 比较操作符(
===、<、>)可跨类型比较值(如10n === 10为false,但10n == 10为true—— 但强烈建议避免使用==)


















