使用 ES12 中的 BigInt64Array 和 BigUint64Array 处理大整数

阅读时长 5 分钟读完

在传统的 JavaScript 中,处理大整数的能力受到了限制。当数字超出了 JavaScript 的 Number 类型的最大值时,我们就需要借助一些工具或外部库来进行处理。但是在 ES12 中,引入了新的类型——BigInt,以及针对大整数处理的两种新的数组类型——BigInt64Array 和 BigUint64Array。本文将探讨如何使用这两种新数组类型处理大整数。

介绍 BigInt64Array 和 BigUint64Array

BigInt64Array 和 BigUint64Array 这两种数组类型的名称表达了它们的本质:这两种数组类型都是由 64 位的整数组成的。BigInt64Array 中存储的整数是有符号的,而 BigUint64Array 中存储的整数是无符号的。这两种数组类型的 API 非常类似于 JavaScript 数组的 API,它们都支持 push、pop、slice 等常见的操作,以及 forEach、map、reduce 等遍历和聚合方法。

下面是创建 BigInt64Array 和 BigUint64Array 对象的基本示例代码:

上述示例中,我们分别创建了一个长度为 10 的 BigInt64Array 和一个长度为 10 的 BigUint64Array。这里需要注意一点,那就是这两种数组类型只支持 64 位整数类型,也就是说传递给它们的参数必须是 BigInt 类型或 64 位的 Number 类型。如果传递的是一个普通的 Number 类型,那么它会被当作普通的数组元素而不是整数值。

在创建好数组对象之后,我们可以通过数组下标或相应的方法来访问和修改数组中的元素。下面是对 BigInt64Array 和 BigUint64Array 进行操作的例子:

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

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

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

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

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

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

上述示例中,我们通过下标、forEach、map 和 reduce 方法来访问和操作 BigInt64Array 数组中的元素,并演示了如何创建和使用 BigUint64Array 数组。我们可以看出,这两种数组类型和普通的 JavaScript 数组非常相似,只不过它们存储的是 64 位整数。

处理大整数

接下来,我们讨论如何使用 BigInt64Array 和 BigUint64Array 来处理大整数。在这里,我们通过另一个案例展示它们的强大能力。

假设我们现在需要计算两个非常大的整数的和,比如 10000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000,我们无法直接将它们相加,因为它们已经超出了 JavaScript 对 Number 类型的最大限制。在这种情况下,我们可以借助 BigInt64Array 和 BigUint64Array 来处理这个问题。

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

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

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

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

上述代码中,我们使用了 BigUint64Array 类型来存储两个大整数 10000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000。接着,我们逐位将这两个数相加,并将结果存储在一个新的 BigUint64Array 对象中。最后,我们可以得到正确的答案 [3n, 0n],也就是 3000000000000000000000000000000000000000000000000000000000000000,这个数已经超出了 JavaScript 的 Number 类型的最大值。

总结

在 ES12 中,我们可以使用 BigInt64Array 和 BigUint64Array 来处理大整数。这两种数组类型支持 64 位整数类型,并且提供了类似于普通 JavaScript 数组的 API,方便我们访问和修改数组元素。BigUint64Array 可以存储任何非负的 64 位整数,BigInt64Array 则可以存储任意 64 位整数(包括负数)。通过这两种类型,我们可以更加方便地处理超出普通 JavaScript 数字范围的大整数。

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

纠错
反馈