ECMAScript 新版本 ES11(即 ES2020)增加了一个重要的特性——BigInt,它可以处理超过 253-1 的整数,这个限制是 JavaScript 中 Number 类型的最大值。本文将介绍 BigInt 的基础用法,以及它如何让你更好地处理大整数计算问题。
BigInt 是什么?
在 JavaScript 中,Number 类型牵扯到两个方面的约束。第一个是最大值(2的53次幂-1,即为9007199254740991),而第二个则是整数计算与浮点数计算共用一个内部结构。
BigInt 是一种全新的数值类型,只有整数,可以无限制的增加数值位数,直到内存耗尽。不过,这也带来了局限性,BigInt 不支持浮点数运算,也不能与 JavaScript 中的 Number 类型相混淆。
如何使用 BigInt
使用 BigInt 只需要在数字后面加上 n 即可。如下代码实例,BigInt 可以处理上亿级别的整数:
const billion = 1000000000n; const trillion = 1000000000000n; console.log(billion); // 1000000000n console.log(trillion); // 1000000000000n
可以看到,billion 和 trillion 的类型都变成了 BigInt。
BigInt 与 Number 的相互转换
BigInt 和 Number 可以互相转换,但 Number 值在转换成 BigInt 时需要注意精度的丢失。
将 BigInt 转换成 Number 的方式如下:
const bigNum = 100000000000000000000000000n; const num = Number(bigNum); // num 为无穷大,需注意
将 Number 转换成 BigInt 的方式如下:
const num = 100000000000000000000000000; const bigNum = BigInt(num);
需要注意的是,在超过最大安全整数时,将 Number 转换成 BigInt 时,也存在精度丢失问题。
BigInt 支持的操作
BigInt 目前支持比较运算符(>、>=、<、<=、==、!=),加减乘运算符(+、-、*),位运算符(&、|、^、~等)等基础运算。
一些示例如下:
const a = 9007199254740991n; const b = 2n; console.log(a + b); // 9007199254740993n console.log(a - b); // 9007199254740989n console.log(a * b); // 18014398509481982n console.log(~a); // -9007199254740992n console.log(a & b); // 0n console.log(a ^ b); // 9007199254740993n
需要注意的是,BigInt 不支持单独的除法(/)运算符,因为会存在精度问题。不过,可以通过 BigInt.prototype.div()
方法来实现除法操作。这个方法是在浏览器中实现的,不是 ECMAScript 规范中的一部分。
与普通整数的区别
BigInt 与普通整数在语法上略有不同,因此在 JavaScript 代码中需要注意一些细节。一些示例如下:
-- -------------------- ---- ------- -- -- ------ ----------------- ----- - - ----- -- -- --- ------ ------------------- ----- - - -------------------- ----- ---- - ------------- -- -------------------- -- -- ------ ---------------- ----- - - ---- ----- - - -- ------------- - --- -- -- ------------- - --- -- --
BigInt 的指导意义
BigInt 的出现,为计算机处理大规模数据提供了新思路。在 JavaScript 开发中,很多时候涉及到大数计算问题,例如加密算法、哈希算法等。以前我们一般需要用到第三方的大数计算库,而现在通过使用 BigInt,我们可以轻松地解决这些问题。
在处理科学计算、金融计算等领域时,BigInt 也会发挥出很大的作用。例如在实现高精度计算库时,我们可以使用 BigInt 来处理大整数的加减乘除等操作。
总结
BigInt 是 ES11 新增的一个重要特性,它可以让我们处理超过安全整数限制的整数,一些操作也很容易上手。但由于 BigInt 只能处理整数,操作上会有一些限制,需要开发者注意。不过,BigInt 的出现,也为我们解决大数计算问题提供了新思路,非常值得进行深入学习。
以上就是 BigInt 的基础用法,想要深入学习 BigInt,还需进一步了解一些高精度计算的模拟实现方式以及性能优化,这些内容也值得我们进一步研究和探讨。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64696f69968c7c53b095c411