当前位置: 首页 > article >正文

JavaScript 中的 BigInt:当普通数字不够“大“时的救星

前言

大家好!今天我们要聊一聊 JavaScript 中那个"大"到不行的数据类型 —— BigInt。如果你曾经因为 JavaScript 的数字精度问题而抓狂,或者好奇为什么 9007199254740992 === 9007199254740993 会返回 true,那么这篇文章就是为你准备的!

为什么我们需要 BigInt?

JavaScript 中的 Number 类型使用 IEEE 754 双精度浮点数表示,这意味着它能安全表示的最大整数是 2^53 - 1(即 9007199254740991)。超过这个数字,事情就开始变得…奇怪。

console.log(9007199254740991) // 正常
console.log(9007199254740992) // 看起来也正常
console.log(9007199254740993) // 等等,这不科学!
// 输出: 9007199254740992console.log(9007199254740992 === 9007199254740993) 
// 输出: true 😱

看到没?JavaScript 在背后偷偷把你的大数字四舍五入了!这就是所谓的"精度丢失"问题。

BigInt 来拯救世界!

ES2020 引入了 BigInt 类型,专门用来表示任意精度的整数。有了它,你再也不用担心数字太大而"失真"了。

创建 BigInt

有两种方式创建 BigInt:

  1. 在数字后面加个 n

    const bigNumber = 9007199254740993n;
    console.log(bigNumber); // 9007199254740993n
    
  2. 使用 BigInt() 函数

    const sameBigNumber = BigInt("9007199254740993");
    console.log(sameBigNumber); // 9007199254740993n
    

注意:

  1. BigInt是一个函数,它不能通过new BigInt来创建
  2. 通过BigInt("123456789123456789")这种方式创建,里面的传入的数据要是Boolean类型(也就是要加双引号,或者本身就是一个布尔类型),不然你传进去的数据已经精度丢失了

BigInt 的基本运算

BigInt 可以像普通数字一样进行运算,只是要注意几点:

const a = 123456789012345678901234567890n;
const b = 987654321098765432109876543210n;// 加法
console.log(a + b); // 1111111110111111111011111111100n// 减法
console.log(b - a); // 864197532086419753208641975320n// 乘法
console.log(a * b); // 121932631137021795226185032733622923332237463801111263526900n// 除法 (会向下取整)
console.log(b / a); // 8n

注意事项:BigInt 的"怪癖"

  1. 不能和 Number 直接混用

    console.log(1n + 2); // TypeError: Cannot mix BigInt and other types
    

    你必须先转换类型:

    console.log(1n + BigInt(2)); // 3n
    
  2. 没有小数部分
    BigInt 就是"大整数",所以:

    console.log(5n / 2n); // 2n,不是 2.5
    
  3. 比较运算符可以混用

    console.log(1n < 2); // true
    console.log(2n === 2); // false (类型不同)
    console.log(2n == 2); // true (值相同)
    
  4. 不能使用 Math 对象的方法

    console.log(Math.sqrt(16n)); // TypeError
    

实际应用场景

  1. 处理大整数 ID
    当你的数据库 ID 超过了 JavaScript 的安全整数范围时,BigInt 就派上用场了。
  2. 加密算法
    许多加密算法需要处理非常大的数字。
  3. 高精度计算
    金融计算、科学计算等需要精确整数运算的场景。

性能考虑

BigInt 的运算比普通 Number 要慢,所以除非真的需要,否则不要滥用。就像你不会用卡车去买菜一样(除非你要买的菜真的很多)。

有趣的 BigInt 技巧

使用 BigInt 计算斐波那契数列

function fibonacci(n) {let a = 0n, b = 1n;for (let i = 0n; i < n; i++) {[a, b] = [b, a + b];}return a;
}console.log(fibonacci(100n));
// 输出: 354224848179261915075n

使用 BigInt 进行位运算

const x = 0b1100110011001100110011001100110011001100110011001100110011001100n;
console.log(x >> 32n); // 右移32位

总结

BigInt 是 JavaScript 中处理大整数的终极解决方案。它就像数字类型的"加长版豪华轿车"——当你需要额外的空间时,它就在那里等着你。记住:

  • 大数字后面加 n 或使用 BigInt() 函数
  • 不能和 Number 直接混用
  • 没有小数部分
  • 比普通 Number 运算慢

现在,去征服那些庞大的数字吧!记住:能力越大,责任越大(特别是当你的数字真的很大的时候)!


希望这篇略带幽默的技术博客能满足你的需求!BigInt 虽然看起来简单,但在实际应用中还是有很多需要注意的细节。如果你有任何问题或需要进一步的解释,随时告诉我!

http://www.lryc.cn/news/2391912.html

相关文章:

  • 通过mailto:实现web/html邮件模板唤起新建邮件并填写内容
  • 2025推客系统小程序开发:独立部署源码交付,高性价比裂变增长引擎
  • 【Python零基础入门系列】第6篇:Python 的数据结构世界(列表、字典、集合、元组)
  • MVCC 原理与并发控制实现
  • CentOS 7.0重置root密码
  • YOLOV11改进策略【最新注意力机制】CVPR2025局部区域注意力机制LRSA-增强局部区域特征之间的交互
  • 3D建模的全景图谱:从55个工具到元宇宙的数字革命
  • Kotlin 活动事件通讯跳转深度讲解
  • vue + ant-design + xlsx 实现Excel多Sheet页导出功能
  • 关于 Web 安全:6. 常见 CMS 开源系统风险点
  • DAY33 简单神经网络
  • OBOO鸥柏丨2025年鸿蒙生态+国产操作系统触摸屏查询一体机核心股
  • 【观成科技】Ymir勒索软件组织窃密木马RustyStealer加密通信分析
  • Vuer开源程序 是一个轻量级的可视化工具包,用于与动态 3D 和机器人数据进行交互。它支持 VR 和 AR,可以在移动设备上运行。
  • 浅谈学习(费曼学习法)
  • 高光谱成像相机:表型技术在林业育种和精确林业的应用
  • iOS App启动优化(冷启动、热启动)
  • 短视频一键搬运 v1.7.1|短视频无水印下载 一键去重
  • 海上石油钻井平台人员安全管控解决方案
  • (25年5.28)ChatGPT Plus充值教程与实用指南:附国内外使用案例与模型排行
  • “以光惠算”走进校园,湖北大学用F5G-A全光网赋能智慧校园
  • stm32cube ide如何生成LL库工程
  • TEASER-plusplu Windows Mingw编译
  • T5和GPT哪个更强大
  • tryhackme——Data Exfiltration
  • 阿里云服务器采用crontab定时任务使acme.sh全自动化申请续签免费SSL证书,并部署在Linux宝塔网站和雷池WAF
  • day40 python图像数据与显存
  • Python+VR:如何让虚拟世界更懂你?——用户行为分析的实践
  • 【华为鸿蒙电脑】首款鸿蒙电脑发布:MateBook Fold 非凡大师 MateBook Pro,擎云星河计划启动
  • 性能优化深度实践:突破vue应用性能