BigInt字面量(如100n)是JavaScript中唯一可靠处理超大整数的方式,通过n后缀声明任意精度整数,避免Number类型因IEEE-754浮点限制导致的精度丢失。

BigInt 字面量(如 100n)是 JavaScript 中处理超过 253 - 1(即 Number.MAX_SAFE_INTEGER)的整数的唯一可靠方式。它通过后缀 n 明确声明一个任意精度的整数,避开 IEEE-754 双精度浮点数的精度限制。
为什么普通 number 类型无法准确表示超大整数
JavaScript 的 number 类型基于 64 位浮点数,只能安全表示最多 53 位有效整数位。一旦整数绝对值超过 253,部分整数将无法被唯一表示,出现“跳号”或舍入误差:
-
9007199254740991 === 9007199254740992→false(仍安全) -
9007199254740992 === 9007199254740993→true(已丢失精度) -
123456789012345678901234567890会被自动转为科学计数法并截断,无法还原原值
正确使用 BigInt 字面量进行运算
必须用 n 后缀显式创建 BigInt,且所有参与运算的操作数都应为 BigInt 类型——混合 number 和 BigInt 会直接报错(TypeError),这是有意设计的安全机制:
- ✅ 正确:
100n + 200n、123456789012345678901234567890n * 999n - ❌ 报错:
100n + 200、BigInt("123") + 456 - ⚠️ 注意:
parseInt("123")返回 number,需显式转:BigInt("123") + 456n
常见操作与注意事项
BigInt 支持基本算术(+、-、*、**、%)、比较(===、<、>)和位运算(&、|、<< 等),但不支持小数、指数符号(如 1e100n 无效)或 Math 方法:
- 转换:用
BigInt(value)构造函数(仅接受整数字符串或安全整数 number) - 不可与
number混合运算,也不能用于JSON.stringify()(需手动序列化) - 布尔上下文中,
0n为false,其余均为true;但建议显式比较避免歧义 - 除法
/会向零取整(截断小数),结果仍是 BigInt;如需余数,用%或BigInt.asIntN()控制位宽
实际应用场景示例
适合需要精确整数计算、且数值远超 253 的场景:
- 密码学:大素数模幂运算(如 RSA 密钥生成中的
(base ** exp) % mod) - 区块链:处理以 wei 为单位的以太坊金额(1 ETH = 1018 wei)
- 高精度计时或天文计算:纳秒级时间戳差值、行星轨道周期累加
- 金融系统中要求严格整数分计价的后台逻辑(避免浮点舍入误差)

















