BigInt 是 JavaScript 中用于安全处理任意精度整数的原始类型,解决 Number 类型因 IEEE 754 限制导致的大整数精度丢失问题;需用 n 后缀或 BigInt() 创建,不与 Number 混合运算,且存在 JSON 序列化、Math 方法兼容性等限制。
BigInt 是 JavaScript 中专门用于表示任意精度整数的原始类型,它能安全处理超出 Number.MAX_SAFE_INTEGER(即 9007199254740991)范围的大整数,避免精度丢失。
Number 表示大整数JavaScript 的 Number 类型基于 IEEE 754 双精度浮点数,只能精确表示 ≤ 2^53 - 1 的整数。超过该值后,连续整数无法被唯一表示:
console.log(9007199254740991 === 9007199254740992); // false console.log(9007199254740992 === 9007199254740993); // true ← 精度已丢失
这种隐式舍入对金融计算、密码学、大 ID 处理等场景是不可接受的。
BigInt
必须通过字面量后缀 n 或构造函数 BigInt() 创建;二者行为不
同,需注意:
123n 是合法字面量;123.5n、1e5n 语法错误BigInt("123") 可接受字符串(支持十进制、十六进制如 "0xFF"),但不接受小数字符串(BigInt("12.5") 报错)BigInt(123) 仅接受安全整数,BigInt(9007199254740992) 会因 Number 先丢失精度而得到错误结果BigInt 和 Number 不能混合运算(1n + 2 报 TypeError)BigInt 的运算与兼容性限制支持常规算术运算(+、-、*、**、%)、位运算(&、|、 等),但不支持 / 的小数结果(除法自动向下取整):
console.log(5n / 2n); // 2n ← 不是 2.5n
关键限制包括:
Math 方法混用(Math.pow(2n, 3n) 报错)JSON.stringify({x: 123n}) 抛异常)1n == 1 返回 true,但 1n === 1 为 false(类型不同)真正要用好 BigInt,得时刻记住它和 Number 是隔离的类型系统——不是“升级版数字”,而是另一套整数语义;传参、序列化、跨环境交互时,类型边界比想象中更硬。