ES10 新特性 BigInt 支持 JavaScript 中的大整数计算

阅读时长 4 分钟读完

在过去,JavaScript 中只能计算 53 位以内的整数。一旦超出了这个范围,就会出现计算错误。为了解决这个问题,ECMAScript 2020(ES10)引入了 BigInt,用于支持 JavaScript 中的大整数计算。

什么是 BigInt?

BigInt 是一种全新的数据类型,用于表示任意长度的整数。BigInt 在 JavaScript 中使用字符串来以十进制数形式表示,并通过前缀 n 来定义一个 BigInt 变量。例如,下面的代码定义了一个 BigInt 数字:

其中,后缀 n 表示这是一个 BigInt 值,而不是普通的数字。

注意事项

  • BigInt 不支持与普通数字(Number)相乘、相除和相减,只能与 BigInt 进行这些操作。
  • 使用简单的算术运算符时,BigInt 会自动将数字转换为 BigInt。例如,1n + 2 将自动将数字 2 转换为 BigInt。
  • 使用 BigInt 时需要特别注意性能问题。大的整数计算可能需要使用更长的时间和更多的内存。

BigInt 的运算

目前,BigInt 支持以下运算:

加法

减法

乘法

除法

幂运算

深度解析

对于大多数计算机语言来说,整数的存储结构都是相似的:将整数拆分成多个字节,每个字节存储 8 位,而每一位只存储 0 或 1。这种存储方式叫做二进制补码。

在 JavaScript 中,一个数的整数部分最多只能是 2 的 53 次方(2^53),因为它被存储在浮点数中,并且只有 53 位有效数字。

这就限制了 JavaScript 中整数的范围。例如,如果我们需要处理一个超出 2^53 的整数,它将被截断并且可能无法得到准确的结果。BigInt 的引入可以解决这个问题。BigInt的每一位可以存储更大的数字(需要更多的内存),从而扩展了能表示的整数的范围。

BigInt 的兼容性

目前,BigInt 还没有被所有现代浏览器完全支持。在 Safari 和 IE 中,BigInt 甚至都不被支持。但是,我们可以通过 polyfill 来解决这个问题。

在 polyfill 中,我们可以直接在代码中使用 BigInt 语法,polyfill 会帮我们转换为兼容的代码。利用 polyfill 方法可以解决大多数兼容性问题。

下面是 polyfill 的示例代码:

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

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

总结

BigInt 是一个全新的数据类型,用于表示任意长度的整数,并且允许我们在 JavaScript 中进行大整数计算。BigInt 的引入很好地解决了 JavaScript 中整数范围的限制问题。

在实践中,我们需要注意 BigInt 的运行性能和兼容性问题,并根据实际需要进行兼容性兼容处理。现在是时候开始使用 BigInt 了。

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

纠错
反馈