javascript 用 bigint 处理超大整数,支持字面量(如123n)和构造函数(bigint("字符串"))创建;支持基本运算但不与number混用,严格相等需用===,常用于长id、高精度时间戳等场景。

JavaScript 处理大整数靠的是 BigInt 类型,它专为超出 Number.MAX_SAFE_INTEGER(即 9007199254740991)的安全范围而设计,避免精度丢失。
如何创建 BigInt 值
有两种可靠方式:
- 字面量写法:在整数末尾加
n,例如123n、0n、-456n - 构造函数写法:用
BigInt("字符串"),比如BigInt("9007199254740991999999");必须传字符串,否则像BigInt(9007199254740991999999)会先被 Number 解析,导致精度已丢失
运算规则与常见限制
BigInt 支持基本算术和位运算,但有明确边界:
- 支持:
+、-、*、**、%、、<code>>>、&、|、^ - 除法
/只返回整数商,自动向下取整(如7n / 3n → 2n),不产生小数 -
不能与 Number 混合运算:写
10n + 5会直接报TypeError;需显式转换,如10n + BigInt(5)或Number(10n) + 5 - 不支持
Math方法(Math.pow、Math.floor等),幂运算请用**,取整逻辑由除法本身保证
比较与类型判断注意事项
比较行为容易踩坑,需特别留意:
-
==(抽象相等)允许类型转换:10n == 10返回true -
===(严格相等)要求类型一致:10n === 10返回false;推荐用===避免隐式转换引发的逻辑错误 -
typeof 123n返回字符串"bigint",是独立于"number"的基本类型 - 大小比较(
、<code>>)可跨类型使用,5n > 4和5n > 4n都合法且结果一致
实际使用场景与技巧
BigInt 不是玩具,而是解决真实问题的工具:
- 解析后端传来的长 ID(如 Snowflake ID、数据库主键),用
JSON.parse(str, (k, v) => /^\d+$/.test(v) ? BigInt(v) : v)自定义 reviver - 处理高精度时间戳(微秒级或纳秒级)、加密算法中的模幂运算
- 对字符串数组转大数并排序:
"12 9999999999999999999 45".split(" ").map(BigInt).sort((a, b) => a - b),注意不能简写为(a,b) => a-b(ES 规范要求函数体完整) - JSON 序列化需手动转字符串:
JSON.stringify({ id: myId.toString() }),否则报错
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











