如何使用 ES11 中引入的 BigInt 类型?

阅读时长 4 分钟读完

如何使用 ES11 中引入的 BigInt 类型?

随着计算机科学和技术的发展,数字数量级的增长也是一个不可避免的趋势。JavaScript 作为一门非常重要的编程语言,为了应对当前数值相加、相减等计算的精度问题,最近的 ECMAScript 标准将 BigInt 引入到开发者的视野中。BigInt 类型,就是为了处理当地位比 Number 类型支持的最大值大时,数字之间的精度问题而诞生的。

下面来详细介绍如何使用 ES11 中引入的 BigInt 类型。

BigInt 类型的声明

在使用 BigInt 类型时,与 Number 类型不同,BigInt 类型要附带一个 n 的后缀,以示区别。例如:

这一个声明可以显式地创建一个大于 2^53 的数字。

BigInt 类型和 Number 类型的区别

BigInt 类型实际上是一种新的 Number 类型的变体,它们之间有些简单的区别。

  • 在 ES11 中,Number 类型支持的最大值为 2 的 53 次幂减 1,也就是 maximum safe integer(最高安全整数)。BigInt 类型可以承载比该值更大的数字,同时不会产生精确度误差。BigInt 类型的上限几乎为无穷大。
  • BigInt 类型缺少 Number 类型的一些特殊值,比如:无穷大(Infinity)、负无穷小(-Infinity)、或者 NaN。因此,我们不能在 BigInt 类型的数字之间执行除、模、或者对数运算。
  • 运算 BigInt 类型和 Number 类型的数字时, BigInt 类型必须转换为 Number 类型,但是同理,BigInt 类型可以通过 Number 类型的运算结果生成新的 BigInt 对象。

BigInt 类型和常规算术运算

BigInt 类型和 Number 类型的运算是不同的。 BigInt 类型使用常规算术运算符,如 +、-、* 和 / 。但运算时用于 BigInt 的运算符是另一个组,与用于适用于 Number 的运算符不同。

举例来说,下面是一个 BigInt 类型与 Number 类型相互运算的例子:

如果将数字类型转换为 BigInt 类型,可以使用 BigInt() 函数将其作为参数传递,以便像通常一样对其进行算术运算。

示例代码

下面看一个实现斐波那契数列的示例,在我们的计算机上比 Number 类型的斐波那契数算法要快很多:

-- -------------------- ---- -------
-------- ------------------ -
  --- --- -- - ---- ----
    --- ---- - - --- - - -- ---- -
        --- -- - --- - - ---
    -
    ------ --
-

----------------------------------- -- -------------

在这个示例中,我们使用 BigInt 类型有效地避免了科学计数法的精度问题。

结论

BigInt 类型是一个非常有用的新工具,可以为 JavaScript 中的大数计算问题提供一种更好的解决方案,以及提供更加精确的计算。与 Number 类型不同, BigInt 类型可以处理大于 maximum safe integer 的数字,并且在执行算术运算时不会出现精度错误。虽然 BigInt 类型的运算速度相对较慢,但在某些情况下,使用 BigInt 类型可以获得比普通类型更好的性能。

需要注意的是,在一些早期版本的浏览器中,BigInt 类型并不被支持,而且 JavaScript 中已经存在的代码可能只适用于 Number 类型。在使用 BigInt 类型时,要对代码环境进行小心地选择。

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

纠错
反馈