ES12 之实现 BigInt 字符串加减乘除运算

在前端开发中,我们经常会处理数字类型的数据,而且这些数据经常会超过 JavaScript 的 Number 类型所能表示的最大值,这时就需要使用 BigInt 类型。ES2020(ES12)引入了 BigInt,它提供了一种可以用来表示任意大小整数的新数据类型。

BigInt 类型可以表示比 Number 类型更大的整数,而且在进行大整数计算时,它的精度和安全性也更高。

BigInt 的用法和 Number 基本一致,只需要在数字后加一个 n 即可,例如:const num = 1234567890123456789012345678901234567890n;。但是,支持 BigInt 的新特性仍然有限。在本文中,我们将学习如何实现 BigInt 的加减乘除等运算。

BigInt 加法

BigInt 类型的加法运算很简单,只需要使用+运算符即可。例如:

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

BigInt 减法

BigInt 类型的减法运算也很简单,只需要使用-运算符即可。例如:

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

BigInt 乘法

BigInt 类型的乘法运算可以使用*运算符,但需要注意的是,对于超大整数的乘法运算,直接使用*可以导致内存溢出或导致运行时间非常长的情况。这时需要使用类似中学生手算乘法的算法,将乘法拆分为多个步骤。

以下是一个简单的 BigInt 乘法算法示例:

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

BigInt 除法

BigInt 类型的除法运算可以使用/运算符,但也需要注意,对于超大整数的除法运算,直接使用/也会导致内存溢出或阻塞时间非常长的情况。

以下是一个简单的 BigInt 除法算法示例:

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

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

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

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

结论

通过上述代码,我们可以看出实现 BigInt 的加减乘除运算并不是一件很简单的事情,但是实际应用中我们更多的是使用 JS 内置的运算符来进行运算。BigInt 的应用范围也比较狭窄,一般只在处理比较大的自然数时才会用到。对于普通的整数计算,还是建议使用 JS 的 Number 类型即可。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67304a05eedcc8a97c91888e