BigInt是JavaScript中用于精确处理超大整数的原始类型,采用二进制补码实现任意精度运算;所有算术操作数必须同为BigInt,否则抛TypeError;支持加减乘除幂取余(除法向零截断),不支持一元加号;不可与Number混用运算,但可安全比较;典型场景包括大ID、密码学计算和金融整数运算。
bigint 是 javascript 中专为精确处理超大整数设计的原始类型,它不遵循 ieee 754 浮点规则,而是用二进制补码实现任意精度整数运算。要正确使用算术运算符,关键在于类型一致性——所有操作数必须同为 bigint,否则会直接抛出 typeerror。
BigInt 的创建与类型识别
必须显式声明,不可隐式转换:
- 字面量写法:在整数后加
n,如9007199254740992n、0xffn(十六进制)、0b1101n(二进制) - 构造函数写法:
BigInt("12345678901234567890"),参数只能是字符串或整数;传小数会报错 -
typeof value === 'bigint'是最可靠的类型判断方式
支持的算术运算符及行为
所有结果仍为 BigInt,且运算严格限定类型:
-
加减乘幂取余:全部支持,如
10n + 5n、3n ** 4n、17n % 5n -
除法:只返回整数部分(向零截断),
7n / 2n得3n,不是3.5n(BigInt 不表示小数) -
不支持一元加号:
+10n报错,需用Number(10n)转换(但注意精度风险)
与 Number 混合使用的常见陷阱
不能直接混合,但可安全比较或显式转换:
-
10n + 5❌ 报错;应写成10n + BigInt(5)✅ - 比较时允许混合:
10n > 5返回true,但10n === 5为false(类型不同) -
==会做抽象相等转换(10n == 10为true),但建议避免,优先用===并统一类型 - 用
Number(bigint)转换需谨慎——超出Number.MAX_SAFE_INTEGER会丢失精度
实际开发中的典型场景
聚焦高精度、纯整数需求:
立即学习“Java免费学习笔记(深入)”;
-
大 ID 处理:Snowflake ID 或数据库主键超过
9007199254740991时,用BigInt存储和比对更可靠 - 密码学计算:模幂、大素数运算等要求零误差,BigInt 是基础支撑
- 金融整数单位:金额统一转“分”再用 BigInt 运算,避开小数精度问题
-
JSON 序列化:
JSON.stringify(100n)报错,需预处理,例如{ id: id.toString() }


















