如何理解BigInt

5 阅读2分钟

如何理解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) // 报错

四、解决了什么问题

  1. 超出2^53超大整数精准存储、运算
  2. 后端长ID、雪花算法、分布式ID、金融大数计算
  3. 彻底规避Number整数精度丢失问题

五、类型判断

typeof 10n // "bigint"

是独立原始类型,和Number完全分开

六、面试高频考点

  1. BigInt和Number区别

    • Number:64位浮点数,有安全整数限制,可存小数
    • BigInt:任意长度纯整数,无上限,无精度丢失
  2. 为什么不能混合运算

    • 防止隐式转换带来不可控精度丢失,语言层面直接限制
  3. 实际业务使用场景

    • 后端返回超长数字ID
    • 高精度金融计算
    • 雪花ID,分布式唯一ID
    • 大数加密/算法运算

七、极简背诵版

  1. BigInt 是 ES2020 新增原始类型,用于解决 Number 超出安全整数范围后精度丢失的问题;
  1. 支持任意长度整数,通过后缀 nBigInt() 创建;
  1. 只能整数运算,不能与 Number 直接混合计算;
  1. 常用于超长 ID、金融大数、大整数运算场景。