bigint 和 number 不能直接混合运算,因为 bigint 是独立原始类型,用于精确表示任意大整数,而 number 基于 ieee 754 浮点数,有精度限制(最大安全整数为 2⁵³−1),语义不同且引擎禁止隐式转换以防精度丢失或行为不一致。

BigInt 和 Number 不能直接混合运算,JavaScript 会抛出 TypeError。必须显式转换类型才能参与计算。
为什么不能直接混用?
BigInt 是独立的原始类型,设计初衷是精确表示任意大的整数,而 Number 基于 IEEE 754 双精度浮点数,有精度限制(最大安全整数为 2<sup>53</sup> - 1)。两者语义不同,引擎禁止隐式转换,避免意外丢失精度或行为不一致。
如何安全地进行计算?
只允许同类型运算。需要手动转换:
-
Number → BigInt:用
BigInt()构造函数,但仅支持整数字符串或整数 Number(小数会报错)
// ✅ 正确BigInt(123)→123nBigInt("9007199254740991")→9007199254740991n
// ❌ 报错:BigInt() 不接受小数BigInt(12.5)→TypeError -
BigInt → Number:用
Number(),但仅当值在-(2<sup>53</sup>-1)到2<sup>53</sup>-1范围内才安全;超出会丢失精度或返回InfinityNumber(100n)→100Number(9007199254740992n)→9007199254740992(仍安全)Number(9007199254740992n + 1n)→9007199254740992(⚠️ 精度丢失!)
常见运算示例
加、减、乘、除、取余、幂运算都支持,但操作数必须同为 BigInt 或同为 Number:
-
100n + 200n→300n -
100 + 200→300 -
BigInt(100) * 20n→2000n -
100n + Number(20)→TypeError(必须先转成同类型)
比较操作需注意
== 和 === 都不相等(类型不同),但 、<code>>、、<code>>= 支持跨类型比较(自动转换为相同精度再比):
-
100n === 100→false -
100n == 100→false 100n → <code>true-
9007199254740992n > Number.MAX_SAFE_INTEGER→true
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











