ES11 新特性:BigInt 精确数字类型

在过去的 JavaScript 中,数字类型只能表示从 -2^532^53 范围内的整数,而对于更大的数字需使用第三方库进行处理。为了解决这个问题,ECMAScript 2020(也称为 ES11)引入了一种新的数字类型:BigInt。

什么是 BigInt?

BigInt 是一种全新的 JavaScript 数据类型,它可以表示任意精度的整数,不再受到数字范围的限制。BigInt 只是用于处理大数字,不能与数字类型交互。

例如,在过去的 JavaScript 中,我们可以用以下代码表示最大的整数:

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

但是,在 BigInt 中,我们可以轻松表示一个数值达到十几个甚至几百个字符长的数字:

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

在上面的代码中,n 后缀表示一个 BigInt 字面量。

如何使用 BigInt?

BigInt 的语法与数字类型相似,但需要在整数后面添加一个 n 后缀。例如:

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

当对 BigInt 进行运算时,需要使用 BigInt 类型的方法,而不能使用数字类型的方法。例如:

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

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

需要注意的是,如果将 BigInt 赋值给数字类型,它将自动转换为 Number 类型,从而可能会丢失精度:

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

因此,如果有需要对 BigInt 进行转换的,需要使用 Number() 函数进行转换。

支持 BigInt 的新方法

除了可以直接对 BigInt 进行数学运算以外,ES11 还引入了一些新的方法来处理 BigInt,例如:

1. 指数运算符

指数运算符是一个 ** 符号,在 ES7 中已经存在。但是,在 BigInt 的情况下,它允许我们计算超大数字的幂,例如:

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

2. BigInt() 函数

BigInt() 函数用于将数字或字符串转换为 BigInt:

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

3. BigInt.asUintN(width, n)BigInt.asIntN(width, n) 函数

这两个函数用于将 BigInt 限制为 width 位,具体来说,BigInt.asUintN(width, n) 将整数转换为无符号 width 位整数,而 BigInt.asIntN(width, n) 将整数转换为 width 位带符号整数:

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

结论

BigInt 是 ES11 中的一项重大改进,它对 JavaScript 来说是一个巨大的进步。通过 BigInt,我们可以处理超出数字范围的大数值,从而在以前需要使用第三方库的情况下使开发更加便捷。但注意需要在转换时切记精度的问题,以免丢失了精度。

示例代码

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

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

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

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

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