从 ES11 开始,JavaScript 是如何处理 BigInt 的?

阅读时长 4 分钟读完

在 JavaScript 中,数字类型默认是双精度浮点型,即 number 类型。这意味着 JavaScript 可以处理的数字范围为 $-2^{53}+1$ 到 $2^{53}-1$。如果想要进行更大的数值计算,之前的解决方案是使用第三方库或将数字拆分成多个较小的部分进行计算。但从 ES11 开始,JavaScript 开始原生支持处理大整数,这就是 BigInt。

什么是 BigInt?

BigInt 是一种新的原生类型,用于表示整数。它可以表示比 Number 更大、更长的整数($2^{53}-1$)。并且 BigInt 不会出现精度损失的问题。

BigInt 类型的变量使用 n 后缀表示,例如 12345678901234567890n

BigInt 的基本操作

BigInt 支持大多数与 Number 相关的操作,但使用方法有所不同。以下是一些例子:

BigInt 的创建

BigInt 的算术操作

BigInt 的比较操作

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

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

BigInt 的限制和注意事项

如果你试图将 BigInt 类型的值与 Number 类型的值相加,会抛出一个 TypeError 异常。因为 BigInt 和 Number 是两个不同的类型。如果需要相加,需要将 Number 类型的值转换为 BigInt 类型。

如果尝试在 BigInt 中使用小数,它会被截断成整数。例如,1.2n 将被截断为 1n

BigInt 内部计算时,位运算操作符(如 <<>>>>>)被禁用。这是因为位运算操作符只能用于 Number 类型的值。另外,无法对 BigInt 变量使用递增/递减运算符(++--)。

不同类型之间的转换

BigInt 类型支持从 NumberBooleanStringBigInt 转换。下面是一些例子:

从 Number 转换

从 Boolean 转换

从 String 转换

从 BigInt 转换

BigInt 的应用案例

BigInt 在日常开发中很少用到,但对于一些特殊的场景来说,它是必须的。以下是一些可能用到 BigInt 的案例:

  • 数字签名
  • 网络协议处理
  • 加密
  • 大数据分析

总结

BigInt 是一个新的原生类型,用于解决 JavaScript 中数字范围限制的问题。它可以表示比 Number 更大、更长的整数,并且不会出现精度损失的问题。尽管使用范围和实际应用有限,但在特定场景下,它是必不可少的。

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

纠错
反馈