如何理解BigInt
一、为什么需要BigInt
js所有Number都是遵循IEEE754双精度浮点数
限制:
安全整数范围:−2^53+1∼2^53−1
Number.MAX_SAFE_INTEGER = 9007199254740991
一旦超过这个数:整数丢失精度、计算错乱
console.log(9007199254740993 === 9007199254740992); // true
大整数场景:(订单号、雪花 ID、区块链、大数运算)直接报废
BigInt就是为了解决:超大整数精准运算
二、什么是BigInt
- ES2020新增原始数据类型
- 专门表示任意长度整数,无精度丢失
- 写法:数字末尾加n或BigInt()
const a = 123n;
const b = BigInt(9007199254740993);
三、核心特点
1.只支持整数,不能存小数
1.5n // 报错
BigInt(0.1) // 丢失精度
2.运算只能和BigInt混算
不能和Number直接加减
10n + 20 // 报错
10n + 20n // 30n 正确
3.比较可以混用(==宽松相等)
10n == 10 // true
10n === 10 // false 类型不同
4.不支持Math方法
Math.abs(10n) // 报错
四、解决了什么问题
- 超出2^53超大整数精准存储、运算
- 后端长ID、雪花算法、分布式ID、金融大数计算
- 彻底规避Number整数精度丢失问题
五、类型判断
typeof 10n // "bigint"
是独立原始类型,和Number完全分开
六、面试高频考点
-
BigInt和Number区别
- Number:64位浮点数,有安全整数限制,可存小数
- BigInt:任意长度纯整数,无上限,无精度丢失
-
为什么不能混合运算
- 防止隐式转换带来不可控精度丢失,语言层面直接限制
-
实际业务使用场景
- 后端返回超长数字ID
- 高精度金融计算
- 雪花ID,分布式唯一ID
- 大数加密/算法运算
七、极简背诵版
- BigInt 是 ES2020 新增原始类型,用于解决 Number 超出安全整数范围后精度丢失的问题;
- 支持任意长度整数,通过后缀
n或BigInt()创建;
- 只能整数运算,不能与 Number 直接混合计算;
- 常用于超长 ID、金融大数、大整数运算场景。