ECMAScript 2018(ES9)中的 “BigInt” 详解

在过去的一段时间内,JavaScript 这门语言已经成为了当今最流行的编程语言之一,用它来开发网络应用已经成为了一种越来越流行的趋势。因为 JavaScript 运行速度快、极易上手,而且使用广泛。而在 ECMAScript 2018(ES9)中,我们将看到一个新的数字类型 BigInt。

什么是 BigInt

BigInt 是指大整数类型,主要是用来表示那些在 JavaScript 中本来超出我们正常数字表示范围的数字。在 ES9 中,BigInt 类型可以表示任意精度的整数。

整数可以使用常规的 Number 类型表示,但是该类型在实现过程中有一些限制。首先,JavaScript 数字的最大值只能表示为 2 的 53 次方减 1,也就是 9007199254740991。因为这个限制,对于超出这个数字范围的数值,虽然会返回 Infinity 而不是错误,但在某些情况下,这个表现并不如人所愿。例如,当需要处理货币数量时,因为超出了 JavaScript 的固定数字范围而导致精度问题的情况就无法避免。

为了解决这个数字范围问题,ES9 引入了 BigInt 类型,一个可以表示非常大整数的类型。用 BigInt 类型来表示的数字可以有任意精度,意味着能够表示任意长度的数字。

以下是 BigInt 常见的用例:

  • 处理金融货币和能源市场交易。
  • 处理时间戳,日期,序列化的变量和配置项等等。
  • 数学运算中,需要处理的整数非常大或非常小的时候。

如何使用 BigInt

BigInt 类型只是 JavaScript 中的另一种数字类型,就像 Number 标准类型一样。你可以简单的在数字末尾加上大写的 "n" 来表示一个 BigInt 类型的数字,例如:

const max = BigInt(Number.MAX_SAFE_INTEGER);   // 9007199254740991n
const bigNumber = 1234567890123456789012345678901234567890n;

这里需要注意的是,BigInt 类型是不允许使用 Math 对象的方法和操作符的,不过它提供了类似四则运算的语法,例如:

const a = 123456789012345678901234567890n;
const b = 987654321098765432109876543210n;
const c = a + b;

console.log(c);   // 输出 "1111111110111111111011111111100"

BigInt 与 Number 的区别

虽然 BigInt 与 Number 类型相似,但也有许多不同之处。其中最重要的区别是 BigInt 可以表示比 Number 类型大得多的数字。BigInt 类型是不会产生精度错误的,因为它没有任何非整型部分。如果 BigInt 与普通 Number 类型相互操作,那么返回值也将是 BigInt 类型。

如果我们在操作时混用 BigInt 和 Number,则会导致类型错误,而且与 Number 类型混用时使用 "+" 和 "-" 操作符的性能会受到损失。BigInt 类型的代码运行速度差于 Number 类型,所以我们应该尽可能地避免混用 BigInt 和 Number 两种数字类型。

总结

在 JavaScript 中,BigInt 是 ECMAScript 2018(ES9)中新引入的数字类型,用来表示超出 JavaScript Number 类型的数字。BigInt 类型的一个很好的用例是当数字非常大或者需要极高的精度时使用。可以通过添加 "n" 后缀创建 BigInt 类型的数字,并且应该尽可能避免 BigInt 和 Number 混用。BigInt 类型目前已获得许多主流浏览器的支持,以及其他 JavaScript 环境中的支持。

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


纠错反馈