JavaScript中超出±2⁵³−1的整数需用BigInt表示,其为ES2020引入的任意精度整数类型,支持字面量(如123n)和构造函数(如BigInt("123"))声明,但不可与Number混算、不支持小数除法及Math/JSON操作。

JavaScript 中超出 Number 安全范围(±2⁵³ − 1)的整数,不能用普通数字类型准确表示,必须改用 BigInt。
用 BigInt 表示超大整数
BigInt 是 ES2020 引入的原始类型,专门处理任意精度整数。声明方式有两种:
- 字面量:在整数末尾加
n,如9007199254740992n - 构造函数:用
BigInt(字符串或安全整数),如BigInt("123456789012345678901234567890")
⚠️ 注意:BigInt(1.5) 会报错;传入小数或 NaN 不合法,必须是整数字符串或 Number 安全整数。
BigInt 运算规则和限制
BigInt 支持基本算术运算(+、-、*、**、%),但有关键约束:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 不能与
Number混合运算,如1n + 2报错,必须显式转换:1n + BigInt(2) - 不支持
/的小数结果,除法自动向下取整(类似Math.floor),且返回BigInt - 不能用于
Math方法(如Math.pow)、日期、JSON 序列化(JSON.stringify(1n)抛错)
安全转换与边界检查
从字符串或用户输入创建 BigInt 前,建议先校验是否为有效整数格式:
- 用正则
/^-?\d+$/判断是否纯数字字符串(含负号) - 避免直接用
parseInt转换再传给BigInt,因为parseInt可能丢失精度(如大数转成科学计数法) - 需要对比大小时,用
===或/<code>>(支持混合比较,如1n ✅,但 <code>1n == 1❌,应使用==或转为同类型)
实际场景示例
比如计算斐波那契第 1000 项(远超 Number.MAX_SAFE_INTEGER):
function fib(n) {<br> let a = 0n, b = 1n;<br> for (let i = 0n; i < BigInt(n); i++) {<br> [a, b] = [b, a + b];<br> }<br> return a;<br>}<br>console.log(fib(1000).toString()); // 输出完整整数字符串
输出需调用 .toString() 才能以十进制字符串形式查看,否则控制台可能简写(如 Chrome 显示为 43466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795166849228875n)

















