深入理解 JavaScript Bigint 类型

深入理解 JavaScript Bigint 类型

引言

嘿,大家好!我是墩墩大魔王丶,今天我们来聊一聊 JavaScript BigInt 类型。在我们日常的前端开发中,处理数字是非常常见的一件事情。但是你知道吗?在传统的 JavaScript 中,处理大整数时可是有点头疼的。为了解决这个问题,JavaScript 在 ECMAScript 2019 标准中引入了 BigInt 类型。那么 BigInt 究竟是什么呢?有什么特点和用途呢?让我们一起来深入了解一下!

背景

在不久之前的 ECMAScript 2019 标准中,JavaScript 中的数字表示存在着一个小小的限制。你能想象一下吗?如果数字太大,它们可能会失去一些精度,结果就不太准确了。比如,假设我们要表示一个非常大的整数,比如 9007199254740993。在 JavaScript 中,我们可以用以下代码表示这个数字:

js 复制代码
const largeNumber = 9007199254740993;
console.log(largeNumber); // 输出:9007199254740992

然而,你会发现输出的结果并不是我们期望的 9007199254740993,而是 9007199254740992。这是因为在 JavaScript 中,数字的精度是有限的,无法准确表示这么大的整数,从而导致了精度丢失的问题。

JavaScript 能够准确表示的整数范围在-2^53到2^53之间(不含两个端点),超过这个范围,无法精确表示这个值。

最小安全负整数: -(2^53-1) = -9007199254740991

最大安全正整数: 2^53-1 = 9007199254740991

最大数值 Number.MAX_VALUE 属性值接近于 1.79E+308。大于 MAX_VALUE 的值代表 "Infinity";

最小的正值 Number.MIN_VALUE 属性值约为 5e-324,是 JavaScript 里最接近 0 的正值,而不是最小的负值,小于 MIN_VALUE 的值将会转换为0;

为了解决这个问题,JavaScript 引入了 BigInt 类型,它可以帮助我们表示任意大小的整数,避免了精度丢失的情况。

基本用法

现在,让我们来看看如何使用 BigInt。首先,你可以用 n 后缀或者 BigInt() 函数来创建一个 BigInt 变量。比如:

js 复制代码
const bigNum1 = 1234567890123456789012345678901234567890n;
const bigNum2 = BigInt("1234567890123456789012345678901234567890");

在上面的例子中,我们使用了两种不同的方法来创建 BigInt 变量。一种是在整数字面量后面加上 n 后缀,另一种是使用 BigInt() 函数,并传递一个整数值或字符串值作为参数。

除了创建之外,你还可以对 BigInt 进行基本的操作和运算。比如加减乘除,取余等。看下面这个例子:

js 复制代码
const a = 123456789012345678901234567890n;
const b = 987654321098765432109876543210n;

const sum = a + b;
console.log(sum); // 输出:1111111111111111111012345678900n

特性与应用

BigInt 可以表示任意精度的整数,这使得它在一些特定的场景下非常有用。比如在密码学中,处理大素数和大整数时就需要使用 BigInt 类型。另外,在处理大数据和科学计算等领域,BigInt 也发挥着重要作用。

下面是一个简单的示例,演示了如何使用 BigInt 来计算斐波那契数列的第 n 项:

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

在 B 端项目中,JavaScript BigInt 类型有着多种具体的应用案例:

  1. 金融系统:在金融系统中,处理货币金额、交易编号等需要处理大整数。使用 BigInt 类型可以确保处理这些大数字时不会丢失精度,保障系统的准确性和可靠性。
  2. 订单编号:在电商平台或企业管理系统中,订单编号通常是一个很大的整数。使用 BigInt 类型可以确保订单编号的唯一性和准确性,避免重复或错误的情况发生。
  3. 数据库操作:在数据库操作中,有时需要处理主键、自增 ID 等大整数。特别是在处理大量数据时,BigInt 类型可以保证数据库操作的准确性和性能。
  4. 加密算法:在加密算法中,处理大素数和大整数是很常见的。使用 BigInt 类型可以确保加密过程中不会丢失精度,提高加密算法的安全性和可靠性。
  5. 数据分析:在数据分析和统计计算中,处理大整数或精确数值是必须的。BigInt 类型可以确保数据分析的准确性,避免误差和偏差的出现。

后端返回的数据 大于 9007199254740991 前端怎么用Bigint接收?

将数据转换为字符串 :由于 JavaScript 中的 Number 类型无法精确表示超过 9007199254740991 的大整数,因此 后端应将这些大整数转换为字符串进行传输

在前端使用 BigInt() 函数创建 BigInt 对象 :前端接收到字符串形式的大整数后,可以使用 BigInt() 函数将其转换为 BigInt 对象。示例如下:

js 复制代码
// 后端返回的字符串形式的大整数
const bigNumberString = "1234567890123456789012345678901234567890";

// 使用 BigInt() 函数将字符串转换为 BigInt 对象
const bigIntNumber = BigInt(bigNumberString);

// 对 BigInt 对象进行操作
const result = bigIntNumber * 2n;
console.log(result); // 输出:2469135780246913578024691357802469135780n

// 将 BigInt 对象转换为字符串
const bigIntString = result.toString();

兼容性与注意事项

当然啦,虽然 BigInt 类型为我们带来了很多便利,但是需要注意的是它并不是所有浏览器都支持的。在使用 BigInt 时,我们需要确保我们的目标浏览器支持它,或者使用相应的兼容性方案。另外,虽然 BigInt 可以表示任意精度的整数,但是在运算过程中也需要注意内存占用和性能方面的问题。

结语

通过这篇文章,相信你已经对 JavaScript BigInt 类型有了更深入的理解。BigInt 类型不仅解决了传统 JavaScript 中处理大整数时的精度丢失问题,而且在密码学、科学计算等领域有着广泛的应用前景。尽管在兼容性和性能方面需要注意一些问题,但是随着技术的不断发展,BigInt 类型必将在前端开发中扮演越来越重要的角色。


希望这篇文章能够帮助你更好地理解和应用 BigInt 类型,让你的前端开发之路更加顺畅!

相关推荐
崔庆才丨静觅3 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60614 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了4 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅4 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅4 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅5 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment5 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅5 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊5 小时前
jwt介绍
前端
爱敲代码的小鱼5 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax