BigInt 是 JavaScript 中表示任意精度整数的原始类型,需用 .toString() 转字符串(支持进制参数),Number() 转数字有精度丢失风险,应先校验是否在安全整数范围内。

BigInt 是 JavaScript 中用于表示任意精度整数的原始类型,适合处理超出 Number.MAX_SAFE_INTEGER(9007199254740991)范围的大整数。它不能与普通数字混用运算,也不能直接用于 Date、Math 或 JSON 操作,因此转换与格式化需格外注意。
BigInt 转字符串:最安全的格式化方式
BigInt 无法隐式转为字符串,但可通过 .toString() 显式转换,支持指定进制(默认十进制):
-
123n.toString()→"123" -
255n.toString(16)→"ff"(十六进制) -
1000n.toString(2)→"1111101000"(二进制)
⚠️ 注意:String(bigint) 虽可工作,但推荐用 .toString() 更明确;bigint + "" 会报错(TypeError)。
BigInt 转 Number:谨慎使用,有精度丢失风险
仅当确定 BigInt 值在安全整数范围内(≤ 9007199254740991),才可用 Number(bigint) 转换:
立即学习“Java免费学习笔记(深入)”;
-
Number(9007199254740991n)→9007199254740991(安全) -
Number(9007199254740992n)→9007199254740992(看似正常,但已不可靠) -
Number(1000000000000000000000n)→1e21(精度丢失,变成浮点近似值)
建议先用 bigint 判断是否可安全转换。
字符串转 BigInt:必须带 n 后缀或调用构造函数
字符串转 BigInt 只能通过 BigInt(str),且字符串必须只含有效整数字符(可带正负号,不可含小数点、空格或单位):
-
BigInt("123")→123n -
BigInt("-45678901234567890")→-45678901234567890n -
BigInt("0xFF")→ ❌ 报错(不支持十六进制字面量解析) -
BigInt("12.3")→ ❌ 报错(不支持小数)
若需解析十六进制或二进制字符串,先用 parseInt(str, radix) 得到普通数字(限安全范围),再转 BigInt;超范围则需手动解析或借助第三方库。
格式化显示:千分位分隔与单位缩写
BigInt 本身不支持 toLocaleString(),需先转字符串再处理:
- 千分位分隔:
bigint.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") - 简写为 K/M/B:
formatBigNumber(1234567890n)可返回"1.23B"(需自行实现逻辑,注意除法要用n / 1_000_000n等 BigInt 运算)
避免用 parseFloat 或 toFixed,它们会强制转 Number 导致精度崩溃。


















