ECMAScript 2020 中新增的 BigInt 类型及其作用

阅读时长 7 分钟读完

ECMAScript 2020 引入了 BigInt 类型,使 JavaScript 具有了处理大整数(超过 2^53-1)的能力,这是 JavaScript 原生没有的。BigInt 类型是一种新的数字类型,允许我们仅改变数字的位数,不改变数字的精度。

1. BigInt 类型的作用

在以往的 JavaScript 中,当需要处理大整数时,我们通常使用第三方库(如 bignumber.js)来实现。但是,这往往会给开发者带来一些问题,例如出现各种类型之间的转换和兼容问题。

因此,BigInt 类型的引入,使开发者可以更方便地处理大整数,而不必再依赖第三方库。

2. BigInt 类型的使用

BigInt 类型以一个后缀 n 结尾,例如:10n。以下是 BigInt 类型的基本使用方法:

2.1. 常量

BigInt 类型支持的常量有:

  • 二进制:以 0b0B 开始
  • 八进制:以 0o0O 开始
  • 十进制:以数字开始
  • 十六进制:以 0x0X 开始

2.2. 运算

BigInt 类型支持的运算符有:+-***/%&|^~<<>>>>>

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

除此之外,BigInt 类型还支持相等和不相等运算符(==!=)、严格相等和不相等运算符(===!==)以及比较运算符(<<=>>=)。

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

2.3. 转换

在使用 BigInt 类型时,我们需要注意以下几点:

  • 不能使用 Number() 函数将 BigInt 类型转换为浮点数;
  • 不能使用 parseInt()parseFloat() 函数将 BigInt 类型转换为整数或浮点数,结果都为 NaN
  • 可以使用 String().toString()JSON.stringify()将 BigInt 类型转换为字符串;
  • 可以使用 BigInt() 将字符串、数字、其他 BigInt 类型和类数组类型(如 NodeListTypedArray)转换为 BigInt 类型;
  • 可以使用 Number() 将 BigInt 类型转换为普通数字,但是可能会失精度。

以下是一些示例:

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

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

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

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

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

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

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

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

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

3. 建议

尽管 BigInt 类型的引入使得 JavaScript 具备了处理大整数的能力,但是在实际使用时,仍需注意以下几点:

  • 在使用 Number() 函数将 BigInt 类型转换为普通数字时,可能会丢失精度;
  • 在涉及到 BigInteger 的情况下,务必要确保代码充分测试,以避免意外的结果;
  • 在使用 BigInt 类型时,需要保证代码的移植性,因为它是一个新引入的特性,可能不被所有的浏览器、引擎和环境支持。

4. 总结

BigInt 类型的引入使得 JavaScript 具备了处理大整数的能力,但在使用时,需要注意精度、测试和兼容性等问题。以下是一个示例代码:

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

纠错
反馈