BigInt通过二进制补码实现任意精度整数运算,需用n后缀或BigInt()构造,不与Number混用,支持算术和位运算但不支持/小数结果及Math方法,适用于大ID、密码学等场景。

JavaScript 中的 BigInt 类型通过底层支持任意精度整数,解决了 Number 类型在大整数运算中丢失精度的问题。它不是浮点数,而是用独立于 IEEE 754 的二进制补码表示法存储整数,因此能精确表示任意大整数(只要内存允许)。
BigInt 的创建方式
必须显式声明,不能隐式转换:
- 字面量形式:在整数末尾加 n,如
123n、0xffn(十六进制)、0b101n(二进制) - 构造函数形式:
BigInt("9007199254740992"),注意参数必须是字符串或可转为整数的值,传入小数会报错 - 不能使用
new BigInt(),会抛出 TypeError
BigInt 与普通数字不能混用运算
BigInt 和 Number 属于不同类型,直接相加、比较等操作会报错(TypeError),必须显式转换:
- 运算前统一类型:比如
10n + BigInt(20)或Number(10n) + 20(但后者可能溢出,不推荐) - 比较时需同类型:
10n > 5❌ 报错;应写成10n > 5n✅ 或Number(10n) > 5(仅当值在安全整数范围内) -
==会做抽象相等转换(10n == 10返回 true),但===严格相等返回 false(类型不同)
支持的运算和限制
BigInt 支持常见算术和位运算,但有明确边界:
立即学习“Java免费学习笔记(深入)”;
- 支持:
+、-、*、**(幂)、%(取余)、&、|、^、<<、>>、>>>(无符号右移) - 不支持:
/运算结果会向零截断(即只保留整数部分),且不支持小数——5n / 2n得2n,不是2.5n - 没有
Math方法支持(如Math.pow(10n, 2)无效),需用**替代 - JSON 不支持序列化 BigInt,
JSON.stringify(100n)会抛错,需手动处理(例如转字符串)
实际使用建议
适合需要精确整数计算的场景,比如密码学、高精度计时、大 ID 处理:
- 后端 ID(如 Snowflake)超过
Number.MAX_SAFE_INTEGER(9007199254740991)时,用BigInt存储和比对更安全 - 涉及金融计算?注意:BigInt 是整数,不能表示小数,货币建议用“分”为单位存整数,再用 BigInt 运算
- 调试时可用
typeof value === 'bigint'判断类型;value.toString()可转为普通字符串,便于日志或展示
不复杂但容易忽略细节,关键是始终记得类型隔离和显式转换。


















