ES2020 引入 BigInt,详细解析

ES2020 是 ECMAScript 提案的最新版本,其中最引人注目的变化之一就是引入了 BigInt。BigInt 是一种新的 JavaScript 数据类型,可以处理超过 Number 类型最大值范围的整数。

在本篇文章中我们将详细分析 BigInt 数据类型,并学习如何使用它。

什么是 BigInt?

BigInt 是一个全新的原生数据类型,可以表示任意精度的整数,也就是说可以处理比 Number 类型更大、更精确的整数。目前,最大的 Number 整数值是 2 的 53 次方(9007199254740992),而 BigInt 可以处理的最大值则远远超过这个范围。

如何定义一个 BigInt?

要定义一个 BigInt,只需要在数字后面加上 n 或者使用 BigInt() 函数将数字转换为 BigInt 类型。

以下是两种定义 BigInt 的方式:

需要注意的是,在数字后面添加 n 是最常用的一种定义方式。这是因为使用 BigInt() 函数转换成 BigInt 类型的方式会丢失精度。

BigInt 的运算

BigInt 可以使用与 Number 类型相同的运算符,但是由于它是一个全新的数据类型,因此需要遵守一些规则。

加、减、乘

以下是 BigInt 加、减、乘的运算规则:

需要注意的是,运算符左右两侧必须都是 BigInt,否则会抛出异常。

除与取模

BigInt 支持除法运算,但是需要注意:由于除法运算获取的结果可能会得到小数部分,因此 BigInt 并不支持浮点数的除法。如果进行除法运算得到的结果是一个小数,BigInt 会将小数部分直接截去。

以下是 BigInt 除法运算以及取模的运算规则:

同样地,在除法和取模运算中,运算符左右两侧必须都是 BigInt。

BigInt 与 Number 的比较

在 BigInt 和 Number 之间进行比较时,需要注意以下规则:

  1. 如果操作符两侧都是 BigInt,则进行 BigInt 之间的比较;
  2. 如果操作符两侧都是 Number,则进行 Number 之间的比较;
  3. 如果操作符两侧分别是 BigInt 和 Number,则会将 Number 自动转换为 BigInt 进行比较。

以下是 BigInt 与 Number 的比较的运算规则:

需要注意的是,如果在进行比较时,BigInt 和 Number 的值相同,但是数据类型不同,则会返回 false。

BigInt 与 JSON

如果需要将一个 BigInt 对象转换为 JSON 的格式,需要使用 toJSON() 方法。这是因为 JSON 无法处理 BigInt 数据类型,JSON 将 BigInt 对象转换为 null。

以下是 BigInt 与 JSON 的转换规则:

应用示例

下面是一个简单的应用示例,计算阶乘。由于阶乘的结果很容易超出 JavaScript 的 Number 类型的范围,因此需要使用 BigInt 处理:

总结

在本文中,我们详细地学习了 BigInt 数据类型的使用方法,了解了它的特性和运算规则。同时,我们也学习了 BigInt 与 Number 之间的比较规则以及如何将 BigInt 转换为 JSON 格式。

由于 BigInt 处理的是超过 Number 类型最大值范围的整数,因此在进行大型的计算和数据处理时,BigInt 可以发挥出其优势。

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


纠错
反馈