JavaScript中的bigint类型是什么_它如何表示大整数

19次阅读

BigInt 是 javaScript 中用于安全处理任意精度整数的原始类型,解决 number 类型因 IEEE 754 限制导致的大整数精度丢失问题;需用 n 后缀或 BigInt() 创建,不与 Number 混合运算,且存在 jsON 序列化、math 方法兼容性等限制。

JavaScript中的bigint类型是什么_它如何表示大整数

BigIntjavascript 中专门用于表示任意精度整数的原始类型,它能安全处理超出 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() 创建;二者行为不同,需注意:

立即学习Java免费学习笔记(深入)”;

  • 123n 是合法字面量;123.5n1e5n 语法错误
  • BigInt("123") 可接受字符串(支持十进制、十六进制如 "0xFF"),但不接受小数字符串(BigInt("12.5") 报错)
  • BigInt(123) 仅接受安全整数,BigInt(9007199254740992) 会因 Number 先丢失精度而得到错误结果
  • BigIntNumber 不能混合运算(1n + 2TypeError

BigInt 的运算与兼容性限制

支持常规算术运算(+-***%)、位运算(&| 等),但不支持 / 的小数结果(除法自动向下取整):

console.log(5n / 2n); // 2n ← 不是 2.5n

关键限制包括:

  • 不能与 Math 方法混用(Math.pow(2n, 3n) 报错)
  • json 不支持序列化(JSON.stringify({x: 123n}) 抛异常)
  • 比较时注意类型: 1n == 1 返回 true,但 1n === 1false(类型不同)
  • 旧版浏览器(如 IE、safari ≤ 13.1)不支持,服务端需确认 node.js ≥ 10.4.0(且 V8 ≥ 6.7)

真正要用好 BigInt,得时刻记住它和 Number 是隔离的类型系统——不是“升级版数字”,而是另一套整数语义;传参、序列化、跨环境交互时,类型边界比想象中更硬。

text=ZqhQzanResources