bigint 和 number 不能用 === 比较(会报错),== 虽可运行但因隐式转换导致精度丢失不可信;关系运算符(如 >、

严格相等(===)直接报错
JavaScript 禁止 BigInt 和 Number 使用 `===` 或 `!==` 比较,会立刻抛出 TypeError:
-
10n === 10→ 报错:“Cannot convert a BigInt value to a number” -
0n === 0→ 同样报错,类型不同即不相等,不尝试转换
这是强制设计,防止隐式转换导致精度丢失,比如把大 BigInt 强转成 Number 时截断。
宽松相等(==)能运行但不可信
`==` 允许混合比较,但引擎的隐式转换逻辑会让结果失真:
-
9007199254740992n == 9007199254740992→ true(看似合理) -
9007199254740993n == 9007199254740993→ 也返回 true(实际已精度丢失)
因为 Number 类型在超过 2⁵³ 后无法区分相邻整数,BigInt 被转成 Number 时就“撞车”了。涉及 ID、金额等关键字段时,这种比较会埋下严重隐患。
关系运算符(, =)安全可用
小于、大于等比较可直接混用,且结果可靠:
-
100n > 99→ true -
0n >= -5→ true -
9007199254740992n > 9007199254740991→ true
引擎内部自动将 Number 提升为 BigInt 进行计算,不损失精度。适合做大小判断、排序、范围检查等场景。
精确相等推荐字符串或显式转换
若需确认两个值“数值内容完全一致”,别依赖 `==`,改用以下任一方式:
- 统一转字符串:
String(1234567890123456789012345n) === '1234567890123456789012345' - 统一转 BigInt:
BigInt('1234567890123456789012345') === 1234567890123456789012345n
语义清晰、无歧义,特别适合校验后端返回的长 ID、加密哈希、高精度金额等。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











