BigInt是JavaScript中处理任意精度整数的原始类型,用于表示超出Number安全范围(±2⁵³−1)的大整数且不丢失精度;创建方式为数字后加n或BigInt()构造函数(推荐传字符串);与Number不可混用运算,需显式转换;支持整数运算和混合比较,但不支持Math方法、一元加号及JSON序列化。

BigInt 是 JavaScript 中专门处理任意精度整数的原始类型,用来表示超出 Number 安全范围(±2⁵³−1)的大整数,不会丢失精度。
BigInt 的基本表示方法
创建 BigInt 有两种常用方式:
- 在整数字面量末尾加字母
n,例如:123n、0n、-456n - 调用全局函数
BigInt(),传入字符串或数字(但注意:传入大数字可能已失真,推荐传字符串),例如:BigInt("9007199254740992")
⚠️ 注意:BigInt(9007199254740992) 不安全,因为 9007199254740992 作为普通数字传入时,JS 已按 Number 类型解析并可能四舍五入;正确写法是 BigInt("9007199254740992")。
BigInt 和 Number 不能混用运算
BigInt 和 Number 属于不同类型,直接混合计算会报错(TypeError):
立即学习“Java免费学习笔记(深入)”;
- ❌ 错误:
10n + 5、10n === 10、Math.max(1n, 2n) - ✅ 正确:所有操作数都为 BigInt,如
10n + 5n、10n === 10n - ✅ 转换需显式:用
Number()或String()转换,但注意Number(bigInt)可能溢出,仅适用于 ≤ 2⁵³−1 的 BigInt
常见支持的操作和限制
BigInt 支持大多数整数运算,但也有明确边界:
- 支持:加(+)、减(−)、乘(*)、除(/,结果向零取整)、取余(%)、幂(**)、位运算(&、|、^、>、>>> 等)
- 不支持:
Math对象方法(如Math.pow)、一元加号(+10n报错)、浮点相关操作(如.toFixed()) - 比较:可与 Number 混合比较(
10n > 5✅),但相等性比较(===)要求类型一致
实际使用建议
适合场景包括高精度计数、密码学计算、时间戳(如纳秒级)、大数据 ID 处理等:
- 读取大整数字符串时,优先用
BigInt(str)构造 - 避免在需要小数或与
Math配合的场合强行用 BigInt - 序列化时注意:JSON 不支持 BigInt,需手动转换(如转字符串)再解析
- 检查类型用
typeof x === 'bigint'
基本上就这些。BigInt 不复杂但容易忽略类型隔离规则,用对了就能稳稳处理超大整数。











