详解 ECMAScript 2020 中的 BigInt 数据类型

阅读时长 6 分钟读完

在之前的 ECMAScript 中,数字数据类型默认是 Number,但是 Number 的表示范围是有限的,无法处理过大或过小的数据。因此在 ECMAScript 2020 中新增了 BigInt 数据类型,用于解决 Number 无法处理大数据的问题。

BigInt 数据类型的特点

BigInt 数据类型指的是任意大小的整数,它的表示范围比 Number 更加广泛。BigInt 可以表示的最大值为 (2n ** 53n) - 1n,最小值为 -(2n ** 53n) + 1n。

下面是 BigInt 数据类型的常见特点:

  1. 表示范围更广:相比 Number,BigInt 的表示范围更加广泛,可以表示更大或更小的整数。
  2. 支持运算符:BigInt 支持基本的运算符,如加减乘除、取模、位运算等。
  3. 字面量表示:可以使用字面量表示 BigInt 数据类型,字面量以 n 结尾,如 123n 表示 BigInt 类型整数 123。
  4. 不会自动转换:BigInt 不会自动转换成 Number,只能使用 BigInt 操作 BigInt,否则会报错。

BigInt 数据类型的语法

BigInt 数据类型的语法和 Number 很相似,都是通过字面量、变量声明和类型转换等方式创建。

字面量表示

可以使用数字后加 n 的方式表示 BigInt:

变量声明

BigInt 变量声明使用 let 或者 const,语法和 Number 基本一致:

类型转换

可以使用 BigInt() 函数将 Number 转换成 BigInt 类型:

BigInt 数据类型的运算

BigInt 数据类型支持基本的运算符,如加减乘除、取模、位运算等。

算术运算

BigInt 支持加减乘除和取模运算,运算符和 Number 类型一样:

位运算

BigInt 支持位运算,运算符和 Number 类型一样:

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

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

BigInt 和 Number 的转换

BigInt 数据类型和 Number 数据类型之间可以进行转换。

BigInt 转 Number

可以使用 Number() 函数将 BigInt 转换成 Number 类型,但需要注意 BigInt 转换成 Number 时,如果 BigInt 值超过最大范围,则会丢失一些数据:

Number 转 BigInt

可以使用 BigInt() 函数将 Number 转换成 BigInt 类型,但需要注意 Number 转换成 BigInt 时,如果 Number 值超过 BigInt 的范围,则会报错:

总结

BigInt 数据类型解决了 Number 无法处理大数据的问题,具有很好的拓展性和应用价值。在使用 BigInt 数据类型时,需要注意 BigInt 和 Number 之间的类型转换问题,以及 BigInt 数据类型的语法和运算特点。在实际应用中,可以将 BigInt 数据类型应用于大数据计算、密码学等方面,具有很大的潜力。

示例代码:

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

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

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

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

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

纠错
反馈