ECMAScript 2020 新特性: BigInt,超出 Number 范围的运算

阅读时长 4 分钟读完

ECMAScript 2020 带来了一些新的 JavaScript 特性,其中之一就是 BigInt。BigInt 允许我们超出 JavaScript 的 Number 类型的最大值范围进行数学运算。这篇文章将会介绍 BigInt,讲述其如何使用以及为什么会对开发有帮助。

为什么需要 BigInt

JavaScript 中的 Number 类型使用 IEEE 754 标准来表示数字,其有效值范围为 $-2^{53}$ 到 $2^{53}-1$,超出这个范围的整数将无法精确表示。在某些领域,如密码学、数据加密和精确计算,需要使用大型整数进行数学运算。

在以前的代码中,定义一个超出 Number 类型范围的整数会导致其显示为 0 或者错误的结果。

尽管上面的代码中 $a$ 的值为 9999999999999999,但最终输出结果是 10000000000000000。这是因为 $a$ 已经超出了 JavaScript 的 Number 类型的有效值范围。

为了解决这个问题,BigInt 被引入到 JavaScript 中。

使用 BigInt

BigInt 使用后缀 n 来表示,因此我们可以使用类似于 $10n$ 的语法来定义 BigInt。

我们可以通过 BigInt() 构造函数将 Number 类型转换为 BigInt 类型。

BigInt 支持所有标准算术运算符,包括加减乘除、求幂和求余数等操作。

需要注意的是,BigInt 与 Number 类型不能混合使用,否则会抛出异常。

BigInt 的指导意义

BigInt 的引入使得 JavaScript 可以支持超出 Number 类型范围的整数运算,这对于需要进行精确计算的应用程序非常有帮助。例如,BigInt 可以用于比特币交易的加密和签名过程中。

此外,BigInt 也可以使生产力更高,因为它允许开发人员编写更少的代码来处理大的整数。例如,假设我们要将两个超过 Number 类型范围的整数相加,我们可以使用 BigInt 稍微更改原始代码:

如果我们要通过使用 Number 类型来实现同样的事情,就需要编写大量的代码:

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

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

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

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

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

可以看到,使用 BigInt 执行此操作显然更简单,更易于阅读和理解。

结论

BigInt 是一个非常有用的功能,它允许我们超越标准数值范围来完成数学运算。在日常开发中,虽然很少遇到大整数的确切要求,但是 BigInt 对于某些密集型计算和安全操作可能会发挥作用。

在使用 BigInt 时,需要注意它与 Number 类型之间的差异,以避免出现不必要的错误或异常。最后,可以通过 BigInt 帮助我们写出更少和更简洁的代码。

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

纠错
反馈