BigInt 是 JavaScript 中用于表示任意精度整数的原始类型,解决 Number 超过 2^53-1 后精度丢失问题;需用 n 后缀或 BigInt() 创建,不兼容 Number,不支持浮点数转换、Math 方法、JSON 直接序列化及混合运算。

BigInt 是什么?它不是 Number 类型的替代品
BigInt 是 JavaScript 中专门用于表示任意精度整数的原始类型,和 Number 互不兼容。它解决的是 Number 在超过 2^53 - 1(即 9007199254740991)后无法精确表示整数的问题。比如 9007199254740992 === 9007199254740993 返回 true,但用 BigInt 就能区分。
如何创建 BigInt?必须加 n 后缀或调用构造函数
不能通过字面量省略后缀,也不能从浮点数或 Number 自动转换。以下写法都合法:
const a = 123n;
const b = BigInt(123);
const c = BigInt("9007199254740991123456789");但这些会报错:
-
BigInt(123.5)→RangeError -
123.5n→ 语法错误 -
let x = 123; x + 10n→TypeError(禁止混合运算)
BigInt 支持哪些运算?不支持小数、位移和一元加号
支持 +、-、*、**、%、&&、||、三元、比较(===、 等),但有明确限制:
立即学习“Java免费学习笔记(深入)”;
-
10n >> 1合法,但10n >>> 1(无符号右移)会报错(不支持) -
+10n报TypeError;必须写Number(10n)或10n.toString()转换 -
Math.max(10n, 20n)报错 ——Math方法全都不接受BigInt -
10n / 3n是整除(结果为3n),不保留小数
JSON 和 DOM 中不能直接使用 BigInt
JSON.stringify(100n) 会抛出 TypeError;document.getElementById("x").dataset.value = 100n 也会失败(DOM 属性只接受字符串)。必须显式转换:
JSON.stringify({ big: 100n }, (k, v) => typeof v === 'bigint' ? v.toString() : v);
// → '{"big":"100"}'同理,从 JSON 解析回来后需手动转回:BigInt(data.big),且要确保原始字符串只含整数字符。
跨浏览器支持已较稳定(Chrome 67+、Firefox 68+、Safari 14+),但服务端 Node.js 需 ≥ v10.4.0,且注意 V8 引擎在序列化时仍不默认支持 BigInt。










