BigInt是专为处理任意精度整数设计的独立类型,解决Number在±2⁵³−1外精度丢失问题;支持n字面量(如123n)和BigInt()构造函数创建,不可与Number混算,支持整数运算和位运算,不支持Math、Date、JSON原生操作。

JavaScript 中的 BigInt 是专为处理任意精度整数而设计的类型,能完美解决 Number 类型在 ±2⁵³ − 1(即 Number.MAX_SAFE_INTEGER)之外丢失精度的问题。
BigInt 的创建方式
必须用后缀 n 字面量或 BigInt() 构造函数创建,不能混用普通数字:
-
const big1 = 123456789012345678901234567890n;✅ -
const big2 = BigInt("123456789012345678901234567890");✅(字符串输入最安全) -
const big3 = BigInt(123);✅(仅限安全整数,否则报错) -
const bad = 123n + 456;❌ 报错:不能与number混合运算
运算规则和注意事项
BigInt 支持基本算术运算(+ - * ** %)、位运算(& | ^ > >>>),但不支持 / 的小数结果(除法会自动向下取整):
-
10n / 3n === 3n(不是3.333...) 10n % 3n === 1n-
2n ** 100n可以轻松计算,无溢出 - 比较时注意:
1n == 1为true(抽象相等),但1n === 1为false(严格不等)
与 Number 和字符串的转换
转换需显式进行,避免隐式 coercion 导致错误:
- 转字符串:
123456789012345678901234567890n.toString()→ 安全、推荐 - 转 Number:
Number(123n)仅适用于 ≤2⁵³−1的值,超范围返回Infinity或精度丢失 - JSON 序列化不支持
BigInt,需手动处理,例如:
实际使用建议
适合场景包括密码学运算、高精度计数器、金融大额整数、时间戳(如纳秒级)、ID 处理等;不适合浮点运算或需要与现有 Number 算法无缝集成的场合:
- 始终用字符串初始化不确定大小的整数:
BigInt(someString) - 避免在循环中频繁创建新
BigInt(有性能开销) - 与第三方库交互前确认是否支持
BigInt(如某些数学库、序列化工具需额外配置) - 浏览器兼容性:Chrome 67+、Firefox 68+、Safari 14+、Node.js 10.4+
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











