ES12 中的新数据类型详解:BigInt

阅读时长 4 分钟读完

ES12 引入了一个新的数据类型 BigInt,用于表示大整数,支持任意精度运算。在之前的 JavaScript 版本中,数字类型的最大值是 (2^53 - 1),BigInt 类型则可以表示比此更大的整数。

为什么需要 BigInt?

由于 JavaScript 中的数字类型采用浮点数表示,存在精度问题。当数字非常大时,可能会出现精度丢失的情况,导致计算结果出现错误。而 BigInt 类型弥补了这一缺陷,可以安全地表示任意大小的整数。

如何创建 BigInt?

在数字的末尾添加一个 n 就可以创建一个 BigInt 类型的数值:

也可以通过 BigInt() 方法将一个数字转化为 BigInt:

另外,可以在 BigInt() 中传入一个字符串来创建 BigInt,字符串的格式必须为整数,并且可以添加正负号:

BigInt 的运算

BigInt 支持所有的基本数学运算,包括加减乘除、取模和幂运算。与使用 Number 类型时一样,对于 BigInt 进行不同类型之间的运算结果,结果会被自动转化为 BigInt 类型。

以下是几个示例:

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

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

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

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

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

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

-- ---
----- --- - - -- --- -- ------------------------------------------------------------------------------------------------------------------------------
展开代码

BigInt 和 Number 的转换

BigInt 和 Number 两种类型是不同的,它们不能直接比较、不能进行位运算。但是,BigInt 可以通过 Number() 方法将其转化为 Number 类型。

以下是几个示例:

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

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

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

----- ------- - ---------------------------
----- ---- - ---------------- -- ----------------
展开代码

BigInt 的限制

虽然 BigInt 可以表示任意大小的整数,但是,在某些情况下使用 BigInt 仍然存在一些限制:

  • BigInt 类型不能与 Number 进行运算,需要先转化为统一的类型;
  • BigInt 类型不能与原始类型相乘,只能与 BigInt 类型相乘;
  • 在使用对象的时候,BigInt 类型不能与原始类型进行比较,需要使用 Object.is() 方法进行比较。

结束语

BigInt 是 ECMAScript 2020 中新增的一个数据类型,用于解决 JavaScript 中数字类型不能表示较大整数精度丢失的问题。本文介绍了 BigInt 的基本用法、运算和限制,希望对读者有所帮助。

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

纠错
反馈

纠错反馈