ECMAScript 2020 (ES11) 中的 BigInt 数组

阅读时长 4 分钟读完

随着数字化生活的发展,大数字运算越来越普遍。在 JavaScript 中,数字类型值得关注,尤其是涉及到超过 Number.MAX_SAFE_INTEGER (2^53 - 1)之内的数字时。ECMAScript 2020 (ES11) 规范中引入了 BigInt 类型和 BigInt 数组,以解决这个问题。

BigInt 简介

BigInt 是一种特殊的数字类型,它支持更大的整数范围,从而可以避免因为浮点数精度限制导致的错误。在 JavaScript 中,可以使用构造函数 BigInt() 或者后缀 n 来创建 BigInt 数字。

以下是一个示例:

BigInt 类型值通过添加一个后缀 n(例如,10n)来表示。

BigInt 数组简介

BigInt 数组是 ES11 新增的数据结构,它支持大于 Number.MAX_SAFE_INTEGER 的整数数组,并且可以高效地进行极大数值的运算。BigInt 数组可以通过实例化 BigInt64Array 或 BigUint64Array 来创建。BigInt64Array 存储有符号的 BigInt 值,而 BigUint64Array 存储无符号 BigInt 值,因此领域不同:

示例:计算阶乘

下面是一个使用 BigInt 数组计算阶乘的示例代码。该函数接受一个正整数 n,返回一个由 n! 的每个十进制位组成的数组。

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

使用上面的代码,可以非常有效地计算任意大小的输入。

总结

BigInt 和 BigInt 数组是 ES11 中为解决超过 Number.MAX_SAFE_INTEGER 的整数值而引入的新语言特性。它们使得 JavaScript 更适合执行涉及大数字的计算。在实践中,开发人员应该仔细考虑是否使用 BigInt 类型:当需要处理号码超过 Number.MAX_SAFE_INTEGER 的场景时,或者需要保证精确度时,BigInt 类型是首选的数据类型。

另外,BigInt 数组和普通数组有一些不同之处,例如它们的元素类型以及底层内存结构,在使用时需要注意这些细节。

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

纠错
反馈