BigInt 是独立原始类型,支持加减乘除幂取余及位运算,但禁止与 Number 混用、不兼容 Math 和 JSON,需显式转换且注意精度与溢出。

JavaScript 中 BigInt 类型支持常见的整数算术运算,但规则和限制与 Number 类型不同。它不是“增强版数字”,而是一个独立的原始类型,必须按其语义正确使用——尤其注意类型隔离、无小数结果、不兼容 Math 方法等关键点。
支持的算术运算符
BigInt 支持以下运算符,且所有操作数和结果都必须是 BigInt 类型:
-
加法(+):如
100n + 200n→300n -
减法(-):如
500n - 123n→377n -
乘法(*):如
12n * 8n→96n -
幂运算(**):如
2n ** 10n→1024n(指数也必须是 BigInt) -
取余(%):如
100n % 7n→2n -
除法(/):结果向下取整(朝零截断),始终返回 BigInt;
10n / 3n→3n,不是3.333...
不能混用 Number 和 BigInt
任何试图将 BigInt 与普通数字(Number)直接参与算术运算的操作都会抛出 TypeError:
- ❌ 错误写法:
10n + 5、100n * 0.5、BigInt(10) - 3 - ✅ 正确做法:显式转换——
10n + BigInt(5)或Number(100n) * 0.5(后者可能丢失精度) - 注意:
BigInt()接收字符串或安全整数,传入小数会报错;Number()转换超大 BigInt 时会溢出为Infinity或精度丢失
位运算与进制表示
BigInt 完整支持位运算,适用于密码学、哈希、掩码等场景:
立即学习“Java免费学习笔记(深入)”;
- 支持:
&(与)、|(或)、^(异或)、~(非)、<<(左移)、>>(带符号右移) - 不支持:
>>>(无符号右移),因为 BigInt 被视为任意长度有符号整数 - 支持多种进制字面量:
0b1010n(二进制)、0o777n(八进制)、0xFFn(十六进制)
常见陷阱与替代方案
避开高频错误,提升代码健壮性:
-
不支持一元加号:
+100n会报错,需用Number(100n) -
不支持 Math 方法:
Math.sqrt(100n)、Math.max(1n, 2n)均无效;需自行实现或转为 Number(谨慎) -
JSON 不兼容:
JSON.stringify({id: 123n})会忽略 BigInt 字段;序列化前需自定义 replacer,如value => typeof value === 'bigint' ? value.toString() : value -
比较要分清 == 和 ===:
10n == 10返回true,但10n === 10是false;建议统一用===并确保类型一致


















