4.【TypeScript 教程】TypeScript BigInt

TypeScript BigInt

本节介绍的 bigint 数据类型是用来表示那些已经超出了 number 类型最大值的整数值,对于总是被诟病的整数溢出问题,使用了 bigint 后将完美解决。

1. 解释

bigint 是一种基本数据类型(primitive data type)。

JavaScript 中可以用 Number 表示的最大整数为 2^53 - 1,可以写为 Number.MAX_SAFE_INTEGER。如果超过了这个界限,可以用 BigInt来表示,它可以表示任意大的整数。

2. 语法

在一个整数字面量后加 n 的方式定义一个 BigInt,如:10n 或者调用函数 BigInt()

const theBiggestInt: bigint = 9007199254740991n
const alsoHuge: bigint = BigInt(9007199254740991)
const hugeString: bigint = BigInt("9007199254740991")theBiggestInt === alsoHuge // true
theBiggestInt === hugeString // true

代码解释:

第 1-3 行,分别是三种表达整数 9007199254740991 的方式,方式不同含义相同,所以完全相等。

BigInt 与 Number 的不同点:

  • BigInt 不能用于 Math 对象中的方法。
  • BigInt 不能和任何 Number 实例混合运算,两者必须转换成同一种类型。
  • BigInt 变量在转换为 Number 变量时可能会丢失精度。
const biggest: number = Number.MAX_SAFE_INTEGERconst biggest1: number = biggest + 1
const biggest2: number = biggest + 2biggest1 === biggest2 // true 超过精度

代码解释:

第 1 行,声明了一个 number 类型最大值的变量 biggest,对于 number 类型来说,这个就是最大精度。

第 3-4 行,最大精度就是这个容器已经完全满了,无论往上加多少都会溢出,所以这两个值是相等的。

而使用 BigInt:

const biggest: bigint = BigInt(Number.MAX_SAFE_INTEGER)const biggest1: bigint = biggest + 1n
const biggest2: bigint = biggest + 2nbiggest1 === biggest2 // false

代码解释:

第 1 行,声明了一个 bigint 类型的变量 biggest

第 3-4 行,bigint 类型就是用来表示那些已经超出了 number 类型最大值的整数值,也就是这个容器还没满,在此基础上加上两个不同的值,其结果不相等。

3. 类型信息

使用 typeof 检测类型时,BigInt 对象返回 bigint:

typeof 10n === 'bigint'         // true
typeof BigInt(10) === 'bigint'  // truetypeof 10 === 'number'          // true
typeof Number(10) === 'number'  // true

代码解释:

typeof 操作符返回一个字符串,表示未经计算的操作数的类型,用来判断基础数据类型。

第 1-2 行,两个书写方式都是 bigint 类型,所以相等。

第 4-5 行,两种书写方式都是 number 类型,所以相等。

4. 运算

BigInt 可以正常使用 +-*/**% 符号进行运算:

const previousMaxSafe: bigint = BigInt(Number.MAX_SAFE_INTEGER)  // 9007199254740991nconst maxPlusOne: bigint = previousMaxSafe + 1n                  // 9007199254740992nconst multi: bigint = previousMaxSafe * 2n                       // 18014398509481982nconst subtr: bigint = multi – 10n                                // 18014398509481972nconst mod: bigint = multi % 10n                                  // 2nconst bigN: bigint = 2n ** 54n                                   // 18014398509481984n

Tip: 当使用 / 操作符时,会向下取整,不会返回小数部分:

const divided: bigint = 5n / 2n                                   // 2n, not 2.5n

5. 比较 与 条件

Number 和 BigInt 可以进行比较:

0n === 0 // false0n == 0 // true1n < 2  // true2n > 1  // true2 > 2   // false2n > 2  // false2n >= 2 // true

条件判断:

if (0n) {console.log('条件成立!');
} else {console.log('条件不成立!'); // 输出结果
}0n || 10n    // 10n0n && 10n    // 0nBoolean(0n)  // falseBoolean(10n) // true!10n         // false!0n          // true

代码解释:

后面会有一节介绍 Truthy 与 Falsy,这里先简单提下。除了明确的 true 和 false 两个 boolean 类型外,JavaScript 可以在需要用到布尔类型值的上下文中使用强制类型转换将值转换为布尔值。

比如 0 是假,10 是真。那么,同样的,0n 是假,10n 是真。

6. 小结

本小节介绍了 BigInt 类型相关知识,由于在 Number 与 BigInt 之间进行转换会损失精度,建议:

  • 不要在两种类型之间进行相互转换。
  • 仅在值可能大于 2^53 - 1 时使用 BigInt

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

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

相关文章

算法练习:查找二维数组中的目标值

题目&#xff1a; 编写一个高效的算法来搜索矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a;每行的元素从左到右升序排列。每列的元素从上到下升序排列。 实现&#xff1a; 1. main方法 public static void main(String[] args) {int[][] matrix {{1…

考研自命题资料、考题如何找

这篇文章是抖音和b站上上传的同名视频的原文稿件&#xff0c;感兴趣的csdn用户可以关注我的抖音和b站账号&#xff08;GeekPower极客力量&#xff09;。同时这篇文章也为视频观众提供方便&#xff0c;可以更加冷静地分析和思考。文章同时在知乎发表。 去年我发布了一个视频&am…

qt打包完整详细过程 包你成功

找问题找了一个多小时&#xff0c;不停调试&#xff0c;还修改文件路径&#xff0c;配置路径&#xff0c;开机关机&#xff0c;最后终于做出来了&#xff0c;得出来了一个结论 我绝对是天才 首先 看这个视频 k14 打包发布_哔哩哔哩_bilibili 不出意外&#xff0c;你绝对会在…

2024.01.09.Apple_UI_BUG

我是软件行业的&#xff0c;虽然不是手机设计的&#xff0c;但是这个设计真的导致经常看信息不完整&#xff0c;要下拉的。 特别读取文本或者其他文件的时候&#xff0c;上面有个抬头就是看不到&#xff0c;烦&#xff0c;体验感很差

linux--香橙派下--自动挂载u盘

参考&#xff1a; [(182 条消息 ) Linux 基础 ] -- udev 和 rules 使用规则 BestW2Y 的博客 -CSDN 博客 linux rules (182 条消息 ) Ubuntu udev rules_zhang6318 的博客 -CSDN 博客 规则文件是 udev 里最重要的部分&#xff0c;默认是存放在 /etc/udev/rule.d/ 下。所…

一氧化碳中毒悲剧频发:探究道合顺电化学传感器促进家庭取暖安全

1月6日&#xff0c;陕西省榆林市发生了一起疑似因使用煤炭炉取暖中毒事件。通报称&#xff0c;经公安部门现场调查&#xff0c;并结合医院救治情况&#xff0c;初步判断5人属一氧化碳中毒&#xff0c;其中4人抢救无效死亡&#xff0c;令人痛心。 一般来说&#xff0c;这种在日…

74应急响应-winlinux分析后门勒索病毒攻击

#操作系统(windows,linux)应急响应&#xff1a; 1.常见危害&#xff1a;暴力破解&#xff0c;漏洞利用&#xff0c;流量攻击&#xff0c;木马控制(Webshell,PC 木马等)&#xff0c;病毒感染(挖矿&#xff0c;蠕虫&#xff0c;勒索等)。 2.常见分析&#xff1a;计算机账户&…

Flutter GetX 之 状态管理

上一篇文章为大家介绍了 GetX的 路由管理,让大家对GetX有了初步了解,今天为大家介绍一下GetX的 状态管理。 StatelessWidget 和 StatefulWidget 介绍 在介绍之前,先简单介绍一下 Flutter 页面的 StatelessWidget 和 StatefulWidget ,其实Flutter的本质是万物都是Widget,…

ELK生命周期

ELKkafka <es生命周期可视化配置界面> 一、创建索引模式 根据logstash中的日志规则 匹配对应系统日志 二、创建索引生命周期策略&#xff1a;可以控制生成索引的生命周期 共4个阶段&#xff1a;热阶段——温阶段——冷阶段——删除阶段 阶段1. hot: 索引被频繁写入和查…

PostgreSQL ZIP版安装完全手册

前言 ZIP免安装版下载地址&#xff1a;社区 DL 页面 (enterprisedb.com) 选择所需的版本下载即可。 安装 将下载的zip安装包&#xff08;我这里下载的是postgresql-15.5-1-windows-x64-binaries.zip&#xff09;解压至D盘根路径下&#xff0c;解压后路径&#xff1a;D:/pgsq…

未来-中国要不要有自己的编程语言

坦白讲&#xff0c;这会是一个非常有争议的话题。在世界大同的今天&#xff0c;中国要不要开发出自己的编程语言&#xff1f;这是否必要&#xff1f; 在构思这个问题的时候&#xff0c;原本以为中国是没有自己的编程语言的。但在仔细查询确认后&#xff0c;发现有一款名为“易语…

MongoDB 设置账号密码_mongodb设置用户名和密码

MongoDB 设置账号密码_mongodb设置用户名和密码 1、安装 安装可以看我这篇文章:https://blog.csdn.net/u014641168/article/details/123937775 2、说明 由于默认安装的MongoDB是没有设置用户密码的,极其危险,所以需要设置一下用户密码 3、创建用户 用Navicat15连接Mon…

三、nginx代理功能

目录 SQUID代理服务器配置安装squid编辑squid配置文件 定义拒绝访问启动squid服务 linux客户端配置linux客户端配置正向代理测试http代理服务器上查看日志/var/log/squid/access.log windows 也可以配置网页代理 SQUID代理服务器配置 安装squid yum install squid -y 编辑squ…

c#自动更新升级工具

c#更新工具,wpf开发,所有windows桌面程序均可使用,基于.net 4.0,最低支持windos xp系统 更新工具优点 使用简单批量更新跨版本更新数据备份手动还原数据体积小 程序更新使用效果 使用简单 只需添加两个类,以及三个路径的指定,就可以从任何地方下载更新包,并解压到主程序目录…

AI人工智能虚拟现实行业发展分析

AI人工智能和虚拟现实是当今科技领域最受关注和研究的两个领域。这两项技术的迅速发展给各行各业带来了巨大的变革和机遇。在过去的几年里&#xff0c;AI和虚拟现实已经取得了显著的进展&#xff0c;并且有着广阔的发展前景。 AI人工智能作为一种模拟人类智能的技术&#xff0…

openEuler22.0.3安装oracle11.2.0.4报错总结

openEuler是CentOS8系列魔改来的 1.xstart无法打开报错x11拒绝转义 yum install *x11* vi /etc/ssh/sshd_config X11Forwarding yes systemctl restart sshd 2.执行runinstaller报错,无论是直接无法打开界面报错: when installed in the jdk 1.2 Linux 还是打开界面报错: no o…

探索检索增强生成(RAG)技术的无限可能:Vector+KG RAG、Self-RAG、多向量检索器多模态RAG集成

探索检索增强生成&#xff08;RAG&#xff09;技术的无限可能&#xff1a;VectorKG RAG、Self-RAG、多向量检索器多模态RAG集成 由于 RAG 的整体思路是首先将文本切分成不同的组块&#xff0c;然后存储到向量数据库中。在实际使用时&#xff0c;将计算用户的问题和文本块的相似…

c++学习:智能指针的底层作用原理+用法

目录 智能指针作用原理 作用 原理 模仿int*类型的智能指针 模仿所有类型的智能指针&#xff08;模板&#xff09; 共享智能指针类 思考&#xff1b;如果多个智能指针同时指向同一个堆空间&#xff0c;怎么只执行一次析构函数进行释放空间 &#xff08;共享智能指针类&…

在VS Code中安装Copilot与安装其他扩展的方法一样,只需简单几步

GitHub Copilot是由OpenAI和GitHub开发的人工智能工具。它的目的是通过自动完成代码来帮助开发人员使用集成开发环境&#xff08;IDE&#xff09;&#xff0c;如Visual Studio Code。它目前仅作为技术预览版提供&#xff0c;因此只有在候补名单上被认可的用户才能访问它。对于用…

Redis:原理速成+项目实战——Redis实战8(基于Redis的分布式锁及优化)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;Redis&#xff1a;原理速成项目实战——Redis实战7&#xff08;优惠券秒杀细节解决超卖、一人一单问题&#xff09; &#x1f4d…