如何使用 ES11 中引入的 BigInt 类型?
随着计算机科学和技术的发展,数字数量级的增长也是一个不可避免的趋势。JavaScript 作为一门非常重要的编程语言,为了应对当前数值相加、相减等计算的精度问题,最近的 ECMAScript 标准将 BigInt 引入到开发者的视野中。BigInt 类型,就是为了处理当地位比 Number 类型支持的最大值大时,数字之间的精度问题而诞生的。
下面来详细介绍如何使用 ES11 中引入的 BigInt 类型。
BigInt 类型的声明
在使用 BigInt 类型时,与 Number 类型不同,BigInt 类型要附带一个 n 的后缀,以示区别。例如:
----- --------- - ------------------------------------------------------------------------
这一个声明可以显式地创建一个大于 2^53 的数字。
BigInt 类型和 Number 类型的区别
BigInt 类型实际上是一种新的 Number 类型的变体,它们之间有些简单的区别。
- 在 ES11 中,Number 类型支持的最大值为 2 的 53 次幂减 1,也就是 maximum safe integer(最高安全整数)。BigInt 类型可以承载比该值更大的数字,同时不会产生精确度误差。BigInt 类型的上限几乎为无穷大。
- BigInt 类型缺少 Number 类型的一些特殊值,比如:无穷大(Infinity)、负无穷小(-Infinity)、或者 NaN。因此,我们不能在 BigInt 类型的数字之间执行除、模、或者对数运算。
- 运算 BigInt 类型和 Number 类型的数字时, BigInt 类型必须转换为 Number 类型,但是同理,BigInt 类型可以通过 Number 类型的运算结果生成新的 BigInt 对象。
BigInt 类型和常规算术运算
BigInt 类型和 Number 类型的运算是不同的。 BigInt 类型使用常规算术运算符,如 +、-、* 和 / 。但运算时用于 BigInt 的运算符是另一个组,与用于适用于 Number 的运算符不同。
举例来说,下面是一个 BigInt 类型与 Number 类型相互运算的例子:
----- --------- - -------- ----- --------- - -- ----- ------ - ---------------- - ------------------- -- -- --------- - -----------------
如果将数字类型转换为 BigInt 类型,可以使用 BigInt() 函数将其作为参数传递,以便像通常一样对其进行算术运算。
示例代码
下面看一个实现斐波那契数列的示例,在我们的计算机上比 Number 类型的斐波那契数算法要快很多:
-------- ------------------ - --- --- -- - ---- ---- --- ---- - - --- - - -- ---- - --- -- - --- - - --- - ------ -- - ----------------------------------- -- -------------
在这个示例中,我们使用 BigInt 类型有效地避免了科学计数法的精度问题。
结论
BigInt 类型是一个非常有用的新工具,可以为 JavaScript 中的大数计算问题提供一种更好的解决方案,以及提供更加精确的计算。与 Number 类型不同, BigInt 类型可以处理大于 maximum safe integer 的数字,并且在执行算术运算时不会出现精度错误。虽然 BigInt 类型的运算速度相对较慢,但在某些情况下,使用 BigInt 类型可以获得比普通类型更好的性能。
需要注意的是,在一些早期版本的浏览器中,BigInt 类型并不被支持,而且 JavaScript 中已经存在的代码可能只适用于 Number 类型。在使用 BigInt 类型时,要对代码环境进行小心地选择。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/66f67ee1c5c563ced587bec6