ES11:JavaScript BigInt 类型的详细介绍

阅读时长 5 分钟读完

在 JavaScript 中,数字类型是一个非常重要的数据类型,它可以存储整数、浮点数等不同类型的数字。然而,随着数字的不断增长,JavaScript 的数字类型也开始表现出了一些限制。为了解决这些限制,ES11 引入了一个新的数据类型 BigInt,用于存储更大范围的整数。

BigInt 类型的定义

BigInt 类型是在 ES11 中引入的一种新的数据类型,用于存储大于 2^53-1 的整数。在 JavaScript 中,Number 类型的最大安全整数是 2^53-1,如果需要存储更大的整数,就需要使用 BigInt 类型。

BigInt 类型的定义方式和 Number 类型类似,使用整数值后面加上 "n" 来表示:

BigInt 类型的运算

BigInt 类型支持大多数的数学运算符,例如加、减、乘、除、取余等。它们的运算规则与 Number 类型相同,但是需要注意的是,BigInt 类型只能和 BigInt 类型进行运算,否则会抛出类型错误的异常。

示例代码:

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

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

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

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

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

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

BigInt 类型的转换

由于 BigInt 类型和其他数据类型不能直接进行运算,因此需要将 BigInt 类型转换为其他数据类型。ES11 提供了三种方法来进行 BigInt 类型的转换:

BigInt.prototype.toString()

将 BigInt 类型转换为字符串类型。

示例代码:

BigInt.asIntN()

将 BigInt 类型转换为指定位数的有符号整数。如果 BigInt 类型的值超出了指定位数,则按照模运算的方式进行截断。

示例代码:

BigInt.asUintN()

将 BigInt 类型转换为指定位数的无符号整数。如果 BigInt 类型的值超出了指定位数,则按照模运算的方式进行截断。

示例代码:

BigInt 类型的注意事项

使用 BigInt 类型需要注意以下几点:

  1. BigInt 类型不能和 Number 类型进行运算,否则会抛出类型错误的异常。
  2. BigInt 类型不支持位运算符(例如按位与、按位或、按位异或等)。
  3. BigInt 类型不能作为对象的属性名或数组的索引值。
  4. BigInt 类型不能直接和字符串进行运算,需要先将 BigInt 类型转换为字符串类型。
  5. BigInt 类型的值不能通过 JSON.stringify() 方法进行序列化。

总结

BigInt 类型是 ES11 中引入的一种新的数据类型,用于存储大于 2^53-1 的整数。它支持大多数的数学运算符,但不能和 Number 类型进行运算。使用 BigInt 类型需要注意一些细节,例如不能作为对象的属性名或数组的索引值等。BigInt 类型的引入为 JavaScript 的数字处理能力提供了更大的灵活性和扩展性。

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

纠错
反馈