ECMAScript 2020 中的 BigInt——JavaScript 的超级大数

阅读时长 4 分钟读完

ECMAScript 2020 中的 BigInt——JavaScript 的超级大数

ECMAScript 2020 中的 BigInt 是一种新型数据类型,用于存储在 JavaScript 中无法表示的整数。在 JavaScript 中,常规数字(Double)的范围是从-253到+253,然而 BigInt 允许你使用非常大的整数,甚至超过了 2**53 的范围。这个新的数据类型是通过在数字末尾添加 N 或 n 即可创建的。例如:

不必担心 BigInt 数字过大,无法进行算术运算。因为 BigInt 已经被升级为正式内置类型,并且注意,使用 BigInt 能够提供良好的性能。事实上,BigInt 的固定长度、支持简单的算术运算等特征使得其具有更高的性能,因为当数字太大时,其速度会比常规数字快。考虑以下代码:

虽然代码很简单,但我们可以将它改造成更加严格的运算,以使其超过常规数字的整数范围:

这里的代码使用 BigInt 类型避免了溢出,而且执行速度更快而且更稳定。

另外,如果需要将普通数字转换成 BigInt,可以使用 toString() 函数重新构造这个数字:

如果需要将 BigInt 数字转换成普通数字,可以使用 Number() 函数:

不过需要注意的是,这个过程是基于科学计数法的,当前执行的数字仅仅是一个四舍五入的值。实际上在执行这段代码时,已经发现它不能正确处理 16 位以上的任何数字。如果需要处理更大范围的整数,还是需要使用 BigInt。

在 BigInt 中,使用 +、-、、/、%、* 和其他运算符,包括位级运算符(如 >>、<<、&、| 和 ^)和比较运算符。但是需要注意的是,如果试图通过混合 BigInt 和普通数字的运算表达式,将会导致异常。

BigInt 变量也可以参与模运算,但是需要特别注意的是,当模数为负数时,可保证 BigInt 模运算将产生定义良好的结果。

BigInt 还支持 bitwise shift 运算符:

BigInt 数字也支持如 toLocaleString()、toString()、valueOf() 等方法,和普通数字类型一样。

ECMAScript 2020 中的 BigInt 对于那些需要处理超出 JavaScript Number 范围很大的数字的人来说,是一项非常有用的特性。这种情况往往是在处理密码或其他加密方法时比较常见的。其总结如下:

  1. BigInt 是一种专门设计用来表示超大数字的新的数据类型。
  2. BigInt 性能优异并能够很好地进行运算。
  3. 在常规数字和 BIgInt 之间进行算术运算时需要注意类型不一致的可能导致的错误。
  4. 任何需要超出常规数值范围的操作均应考虑使用 BigInt 变量。

在实际开发过程中,通过 BigInt 类型可以更好地处理需要大量超出 Number 范围数字的问题,因此对开发人员来说是非常重要的。

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

纠错
反馈