ECMAScript 2021 中的 BigInts 详解:JavaScript 大数的新时代

ECMAScript 2021 中的 BigInts 详解:JavaScript 大数的新时代

在以往的 JavaScript 中,数字类型的最大值是 2^53 - 1,超出这个范围的数字会被转换成 Infinity。而在 ECMAScript 2021 中,新增了一种数据类型 BigInt,可以用来表示任意精度的整数,解决了 JavaScript 处理大数的痛点。本文将详细介绍 BigInt 的使用方法和注意事项,以及与其他数据类型的转换和运算。

一、BigInt 的基本用法

BigInt 是一种新的数据类型,用来表示任意精度的整数,可以用字面量或构造函数创建。字面量的格式是在数字后面加上 n 或 N,构造函数的参数可以是数字、字符串、BigInt 等。下面是一些示例代码:

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

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

需要注意的是,BigInt 和 Number 不能直接进行运算,需要通过 BigInt() 转换成 BigInt 类型才能进行运算。下面是一些示例代码:

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

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

二、BigInt 的注意事项

  1. BigInt 不能与 Number 相加减,需要先转换成相同类型再进行运算;
  2. BigInt 不能直接与字符串拼接,需要先转换成字符串再拼接;
  3. BigInt 不能用于位运算和 Math 对象的方法;
  4. BigInt 不能参与比较运算,需要使用 BigInt.asUintN() 或 BigInt.asIntN() 方法转换成相同位数的无符号整数或有符号整数再进行比较。

下面是一些示例代码:

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

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

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

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

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

三、BigInt 的运算和转换

BigInt 可以进行基本的数学运算,包括加、减、乘、除、取模等。需要注意的是,除法运算会向下取整,取模运算结果的符号与被除数相同。下面是一些示例代码:

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

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

BigInt 还可以进行位运算,包括与、或、异或、左移、右移等。需要注意的是,位运算符只能用于无符号 32 位整数,需要先将 BigInt 转换成 Number 再进行位运算。下面是一些示例代码:

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

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

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

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

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

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

BigInt 还可以与其他数据类型进行转换,包括 Number、字符串和布尔值。需要注意的是,如果转换成 Number,超出安全整数范围的 BigInt 会被转换成 Infinity 或 -Infinity。下面是一些示例代码:

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

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

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

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

四、BigInt 的应用场景

BigInt 的主要应用场景是处理大数计算,例如密码学、数论、高精度计算等。在以往的 JavaScript 中,处理大数计算需要借助第三方库,例如 BigInteger.js、bignumber.js 等。而在 ECMAScript 2021 中,BigInt 提供了原生支持,可以减少代码量和依赖库。下面是一个示例代码,使用 BigInt 计算 100 的阶乘:

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

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

五、总结

BigInt 是 ECMAScript 2021 中新增的一种数据类型,用来表示任意精度的整数。BigInt 可以进行基本的数学运算和位运算,还可以与其他数据类型进行转换。需要注意的是,BigInt 不能与 Number 直接进行运算和比较,也不能用于位运算和 Math 对象的方法。BigInt 的主要应用场景是处理大数计算,例如密码学、数论、高精度计算等。

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