JavaScript中的BigInt类型

🧑‍🎓 个人主页:《爱蹦跶的大A阿》

🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》

​ 

✨ 前言

        在我们日常生活中,JavaScript已经成为了一种无处不在的编程语言。它的应用范围从简单的网页动画,到复杂的前端框架,再到后端的Node.js,甚至还包括物联网设备。然而,JavaScript并非一成不变,它一直在发展,一直在添加新的特性和功能。今天,我们将探讨JavaScript中的一个新的数据类型:BigInt。这个新的数据类型允许我们在JavaScript中处理任意大小的整数,这在处理大量数据或高精度计算时非常有用。在这篇文章中,我们将详细介绍BigInt,包括它的定义、使用方法、数学运算、比较运算,以及如何在不支持BigInt的浏览器中进行polyfill。

✨ 正文

什么是BigInt

        BigInt是JavaScript中最近添加的一种特殊的数字类型,它提供了对任意长度整数的支持。创建BigInt的方式有两种:在一个整数字面量后面加n,或者调用BigInt函数,该函数从字符串、数字等中生成BigInt。

const bigint = 1234567890123456789012345678901234567890n;
const sameBigint = BigInt("1234567890123456789012345678901234567890");
const bigintFromNumber = BigInt(10); // 与 10n 相同

BigInt的数学运算

BigInt大多数情况下可以像常规数字类型一样使用。例如:

alert(1n + 2n); // 3
alert(5n / 2n); // 2

        请注意,除法5/2的结果向零进行舍入,舍入后得到的结果没有了小数部分。对BigInt的所有操作,返回的结果也是BigInt。

我们不可以把BigInt和常规数字类型混合使用:

alert(1n + 2); // Error: Cannot mix BigInt and other types

如果有需要,我们应该显式地转换它们:使用BigInt()或者Number(),像这样:

let bigint = 1n;
let number = 2;// 将 number 转换为 bigint
alert( bigint + BigInt( number)); // 3// 将 bigint 转换为 number
alert(Number( bigint) + number); // 3

        转换操作始终是静默的,绝不会报错,但是如果BigInt太大而数字类型无法容纳,则会截断多余的位,因此我们应该谨慎进行此类转换。

BigInt不支持一元加法

        一元加法运算符+value,是大家熟知的将value转换成数字类型的方法。为了避免混淆,在BigInt中不支持一元加法:

let bigint = 1n;
alert( + bigint ); // error

所以我们应该用Number()来将一个BigInt转换成一个数字类型。

比较运算符

比较运算符,例如<和>,使用它们来对BigInt和number类型的数字进行比较没有问题:

alert( 2n > 1n ); // true
alert( 2n > 1 ); // true

         但是请注意,由于number和BigInt属于不同类型,它们可能在进行==比较时相等,但在进行===(严格相等)比较时不相等:

alert( 1 == 1n ); // true
alert( 1 === 1n ); // false

布尔运算

        当在if或其他布尔运算中时,BigInt的行为类似于number。例如,在if中,BigInt 0n为假,其他值为真:

if (0n) {// 永远不会执行
}

 布尔运算符,例如||,&&和其他运算符,处理BigInt的方式也类似于number:

alert( 1n || 2 ); // 1(1n 被认为是真)
alert( 0n || 2 ); // 2(0n 被认为是假)

Polyfill

        Polyfilling BigInt比较棘手。原因是许多JavaScript运算符,比如+和-等,在对待BigInt的行为上与常规number相比有所不同。例如,BigInt的除法总是返回BigInt(如果需要,会进行舍入)。想要模拟这种行为,polyfill需要分析代码,并用其函数替换所有此类运算符。但是这样做很麻烦,并且会耗费很多性能。所以,目前并没有一个众所周知的好用的polyfill。

        不过,JSBI库的开发者提出了另一种解决方案。该库使用自己的方法实现了大的数字。我们可以使用它们替代原生的BigInt。

运算原生 BigIntJSBI
从 Number 创建a = BigInt(789)a = JSBI.BigInt(789)
加法c = a + bc = JSBI.add(a, b)
减法c = a - bc = JSBI.subtract(a, b)

        然后,对于那些支持BigInt的浏览器,可以使用polyfill(Babel插件)将JSBI调用转换为原生的BigInt。换句话说,这个方法建议我们在写代码时使用JSBI替代原生的BigInt。但是JSBI在内部像使用BigInt一样使用number,并最大程度按照规范进行模拟,所以代码已经是准备好转换成BigInt的了(BigInt-ready)。对于不支持BigInt的引擎,我们可以“按原样”使用此类JSBI代码,对于那些支持BigInt的引擎——polyfill会将调用转换为原生的BigInt。 

✨ 结语

        JavaScript的BigInt类型为我们打开了一个全新的世界,让我们能够在JavaScript中处理任意大小的整数。虽然BigInt在一些方面与常规的数字类型有所不同,但是只要我们理解了这些差异,并知道如何正确地使用BigInt,我们就能够充分利用它的强大功能。无论你是正在处理大数据,还是在进行高精度计算,BigInt都能够提供强大的支持。希望这篇文章能够帮助你理解和掌握JavaScript中的BigInt类型,让你在编程的道路上更进一步。如果你有任何问题或者需要更深入的讨论,欢迎随时向我提问!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/243576.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SWAT-MODFLOW地表水与地下水耦合

详情点击链接&#xff1a;基于SWAT-MODFLOW地表水与地下水耦合 第一模型原理与层次结构 1.1 SWAT模型 1.2 MODFLOW模型 1.3 SWAT-MODFLOW地表-地下耦合模型 1.4 QSWATMOD功能与层次结构 1.5 模型实现所需软件平台 第二QGIS软件 2.1 QGIS平台 2.2 QGIS安装 2.3 QGIS界面…

Oracle 高级网络压缩 白皮书

英文版白皮书在这里 或 这里。 本文包括了对英文白皮书的翻译&#xff0c;和我觉得较重要的要点总结。 执行概述 Oracle Database 12 引入了一项新功能&#xff1a;高级网络压缩&#xff0c;作为高级压缩选项的一部分。 本文概述了高级网络压缩、其优点、配置细节和性能分析…

深入HashMap底层理解阿里手册的遍历守则

写在文章开头 你好&#xff0c;我叫sharkchili&#xff0c;目前还是在一线奋斗的Java开发&#xff0c;经历过很多有意思的项目&#xff0c;也写过很多有意思的文章&#xff0c;是CSDN Java领域的博客专家&#xff0c;也是Java Guide的维护者之一&#xff0c;非常欢迎你关注我的…

特斯拉FSD的神经网络(Tesla 2022 AI Day)

这是特斯拉的全自动驾驶&#xff08;Full Self Driver&#xff09;技术结构图&#xff0c;图中把自动驾驶模型拆分出分成了几个依赖的模块&#xff1a; 技术底座&#xff1a;自动标注技术处理大量数据&#xff0c;仿真技术创造图片数据&#xff0c;大数据引擎进不断地更新&…

Visual Studio2022实用使用技巧集

前言 对于.NET开发者而言Visual Studio是我们日常工作中比较常用的开发工具&#xff0c;掌握一些Visual Studio实用的搜索、查找、替换技巧可以帮助我们大大提高工作效率从而避免996。 Visual Studio更多实用技巧 https://github.com/YSGStudyHards/DotNetGuide 代码和功能搜…

用flinkcdc debezium来捕获数据库的删除内容

我在用flinkcdc把数据从sqlserver写到doris 正常情况下sqlserver有删除数据&#xff0c;doris是能捕获到并很快同步删除的。 但是我现在情况是doris做为数仓&#xff0c;数据写到ods&#xff0c;ods的数据还会通过flink计算后写入dwd层&#xff0c;所以此时ods的数据是删除了…

【解决方案】浅谈安科瑞无线测温监控系统方案

1概述 Acrel-2000T无线测温监控系统装置适用于高低压开关柜内电缆接头、断路器触头、刀闸开关、高压电缆中间头、干式变压器、低压大电流等设备的温度监测&#xff0c;防止在运行过程中因氧化、松动、灰尘等因素造成接点接触电阻过大而发热成为安全隐患&#xff0c;提高设备安…

用ChatGPT教学、科研!亚利桑那州立大学与OpenAI合作

亚利桑那州立大学&#xff08;简称“ASU”&#xff09;在官网宣布与OpenAI达成技术合作。从2024年2月份开始&#xff0c;为所有学生提供ChatGPT企业版访问权限&#xff0c;主要用于学习、课程作业和学术研究等。 为了帮助学生更好地学习ChatGPT和大语言模型产品&#xff0c;AS…

3DMAX初级小白班第一课:菜单栏介绍

基本介绍 这里不可能一个一个选项全部教给大家&#xff08;毕竟之后靠实操慢慢就记住了&#xff09;&#xff0c;只说一些相对需要注意的设置。 自定义-热键编辑器-热键设置 这里有你所需要的全部快捷键 自定义-自定义UI启动布局 将UI布局还原到启动的位置 自定义-通用单…

第2章-OSI参考模型与TCP/IP模型

目录 1. 引入 2. OSI参考模型 2.1. 物理层 2.2. 数据链路层 2.3. 网络层 2.4. 传输层 2.5. 会话层 2.6. 表示层 2.7. 应用层 3. 数据的封装与解封装 4. TCP/IP模型 4.1. 背景引入 4.2. TCP/IP模型&#xff08;4层&#xff09; 4.3. 拓展 1. 引入 1&#xff09;产…

Maven 打包时,依赖配置正确,但是类引入出现错误,一般是快照(Snapshot)依赖拉取策略问题

问题描述&#xff1a; 项目打包时&#xff0c;类缺少依赖&#xff0c;操作 pom.xml -> Maven -> Reload project &#xff0c;还是不生效&#xff0c;但是同事&#xff08;别人&#xff09;那里正常。 问题出现的环境&#xff1a; 可能项目是多模块项目&#xff0c;结构…

postman测试导入文件

01 上传文件参数 1.选择请求方式 选择post请求方式&#xff0c;输入请求地址 2.填写Headers Key&#xff1a;Content-Type &#xff1b; Value&#xff1a;multipart/form-data 如下图 3.填写body 选择form-data&#xff0c;key选择file类型后value会出现按钮&#xff0…

2023.1.17 关于 Redis 持久化 AOF 策略详解

目录 引言 AOF 策略 实例演示一 缓冲区 重写机制 手动触发 自动触发 AOF 重写流程 实例演示二 引言 Redis 实现持久化的两大策略 RDB ——> Redis DataBase&#xff08;定期备份&#xff09;AOF ——> Append Only File&#xff08;实时备份&#xff09; 注意&…

Operation

contents 服务器一、相关概念1.1 云服务器与实例1.2 关于域名解析延时与80端口1.3 关于备案1.4 关于SSL证书1.5 关于SSL证书的签发1.6 关于SSL证书的部署1.7 关于LNMP和LAMP1.8 关于bt面板 二、单服务器单一级域名多网站2.1 创建多个二级域名2.2 解析二级域名绑定到服务器上2.3…

洛谷 P1126 机器人搬重物

题目描述 机器人移动学会&#xff08;RMI&#xff09;现在正尝试用机器人搬运物品。机器人的形状是一个直径 1.6 米的球。在试验阶段&#xff0c;机器人被用于在一个储藏室中搬运货物。储藏室是一个 NM 的网格&#xff0c;有些格子为不可移动的障碍。机器人的中心总是在格点上…

数仓建设学习路线(三)元数据管理

什么是元数据&#xff1f; 简单来说就是描述数据的数据&#xff0c;更直白来说就是描述表名、表制作者、表字段、表生命周期、表存粗等信息的数据 元数据该如何管理 工具化 开源&#xff1a; 可通过atlas获取表依赖及信息做二次开发&#xff0c;或者完成可视化界面 平台化&am…

为什么单片机不能直接驱动继电器和电磁阀?

为什么单片机不能直接驱动继电器和电磁阀&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&…

FastDFS分布式文件存储

为什么会有分布式文件系统&#xff1f; 分布式文件系统是面对互联网的需求而产生。因为互联网时代要对海量数据进行存储。很显然靠简单的增加硬盘个数已经满足不了我们的要求。因为硬盘传输速度有限但是数据在急剧增长&#xff0c;另外我们还要要做好数据备份、数据安全等。采用…

【linux】Debian防火墙

Debian系统默认没有安装防火墙&#xff0c;但用户可以根据需要自行选择并安装一个防火墙以增强系统安全性。 一、查看Debian 桌面系统的防火墙是否关闭 在Debian及其他基于Linux的桌面系统中&#xff0c;防火墙功能通常是由iptables或nftables规则集控制的&#xff0c;而ufw&…

pikachu验证码绕过第三关攻略

打开pikachu靶场第三关&#xff1a; 挂上代理&#xff0c;随便输入账户密码&#xff1a; 返回bp。进行放包发现显示token错误。 每一次登录的返回包会带有token相关数据用于下一次的登录认证&#xff1a; 进行替换token值&#xff1a; 替换完成开始进行检点的爆破&#xff1a;…