必须掌握的 ES11 中的 BigInt 类型

阅读时长 6 分钟读完

在 ES11 中,新增了一个名为 BigInt 的数据类型,意味着 JavaScript 已经支持了大整数计算,且可保存更大范围的整数。在我们解决一些日常的数据处理问题时,这个新的 BigInt 类型可能会很有用,甚至可以替代掉之前我们所熟悉的 Number 类型。

什么是 BigInt 类型?

在 JavaScript 中, 除了 BigInt 类型以外的其他数字类型都是以固定的位数表示和存储数字。而 BigInt 类型则允许我们使用任何位数表示和存储数字。这使得 BigInt 类型支持的最大数值远远超过了 Number 类型,实际上,它可以表示任何我们需要的整数,无论它有多大。

在 BigInt 中,数字后面可以使用 n 后缀或者 BigInt() 构造函数来声明一个 BigInt 类型的数字。

使用 BigInt 类型做整数运算

在 JavaScript 中,我们可以对 BigInt 数据类型进行各种算术运算。

在以上示例中,你会注意到我们对 BigInt 类型数据进行了一些常见的算术运算,比如 +-*/。要注意一点的是,BigInt 类型的算术运算采用了类似于普通数字运算的语法规则,但是 JavaScript 会根据 BigInt 类型数据来做出不同的计算结果。

BigInt 类型和 Number 类型之间的转换

在 JavaScript 中,如果我们想要将 BigInt 类型转换成 Number 类型,我们只需要使用 Number() 函数进行转换。但是,需要注意的是,如果 BigInt 类型的数据在转换成 Number 数据类型的过程中超出了 Number 类型的表示范围,那么就会损失精度。

同样的,如果我们想要将 Number 类型的数据转换成 BigInt 类型,我们可以在数字后面添加 n 后缀或者使用 BigInt() 构造函数来进行转换。但是同样需要注意的是,如果 Number 类型的数据在转换成 BigInt 类型的过程中超出了 BigInt 类型可表示范围,会导致数据丢失一部分精度。

BigInt 类型和字符串之间的转换

和 Number 类型和字符串之间的通常操作类似,我们也可以用 String() 函数把 BigInt 类型转换为字符串类型。在 BigInt 类型的数据后面添加一个空的字符串也可以实现这个操作。

如果我们有一个字符串类型的数据,我们可以使用 BigInt() 构造函数来将其转换为 BigInt 类型。在使用 BigInt() 函数进行转换之前,我们需要确保这个字符串数据中不会出现任何超出 BigInt 类型表示范围的数字。

在以上示例中,我们使用 BigInt() 构造函数实现了字符串类型和 BigInt 类型之间的转换,转换成果期望的 1234567890123456789012345678901234567890n。

BigInt 类型的应用场景

现实生活中,我们会遇到许多需要处理非常大的数字的问题。例如,我们需要在加密/解密、数据流中进行优化、处理密码等领域中使用如此高的精度。但是,在很多情况下,我们使用基础的 Number 类型可能显得力不从心。

请看以下代码片段:

在以上代码片段中,我们可以看出 Number 类型对数字的极限。超出 Number 的最大有限值时,运算得到的结果就不是预期的结果。这时候 BigInt 类型就可以派上用场了。

在以下示例中,我们尝试在原基础上添加一个数值:

在以上示例中,我们可以看到通过 BigInt 类型处理整数计算,可以得到预期的结果。同时,如果您在使用任何第三方数字处理库时,都可以考虑使用 BigInt 类型来代替 Number 类型处理整数计算。

总结

了解 BigInt 类型是使用 JavaScript 开发时很重要的一点。 BigInt 类型的出现意味着我们不再受限于 Number 类型。它使得我们能够处理远远超过 JavaScript 中默认数字上限的数字,是在数字处理领域中一次巨大的进步。

虽然 BigInt 类型目前还不是很常见,但是它可以让我们更方便地去解决一些非常大的数字问题。它不仅对开发人员在计算机科学领域,还有特定领域的开发人员都非常重要,如密码学、科学计算和金融等。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64fff09095b1f8cacde2d89d

纠错
反馈