ES9:BigInt 的使用及如何在代码中使用大数
在日常的编程工作中,我们常常需要处理大数问题,比如超过 JavaScript 所能表示的 Number.MAX_SAFE_INTEGER
限制的整数运算等。ES9 (ECMAScript 2018) 推出了一种新的数据类型 BigInt,来解决这一问题。本文将介绍 BigInt 的使用及在代码中使用大数的方法。
一、ES9 中的 BigInt
BigInt 是一种新的基本数据类型,用于表示任意大小的整数,它可以安全地表示和操作大整数,最大可以处理的位数为 2⁵³ - 1。
BigInt 被用于处理一些超过安全整数范围的计算任务。一个安全整数指的是为了精确表示之而在 JavaScript 中所能表示的最大整数。
BigInt 类型字面量以 n
结尾:
-------------- -- ---- -- -----------------
BigInt 也可以使用 BigInt()
构造函数创建:
----- - - --------------------------- -------------- -- -----------------
二、BigInt 的基本操作
BigInt 支持基本的数学运算符:+
、-
、*
、/
、%
、**
运算符。
----- - - -------------------------------------- ----- - - -------------------------------------- ------------- - -- -- -------------------------------------- ------------- - -- -- ------------------------------------- ------------- - -- -- ------------------------------------------------------------------------------- ------------- - -- -- -- ------------- - -- -- ------------------------------------- ------------- -- -- -- ----------- ------ --- --- -- -------
注意:BigInt 与普通数之间运算,需要转为 BigInt 类型,否则会自动转换为普通数。另外值得注意的一点是,两个 BigInt 值之间不能用 <
、>
、==
等运算符进行比较,需要使用 BigInt.prototype.compare()
方法。
----- - - -------------------------------------- ------------- --- ------------------------------------- -- ----- ------------- -- ------------------------------------- -- ----- ------------- - --- -- ------------------------------------- ------------- - --- -- ---- ------------------------- - -- -- ----
三、如何在代码中使用大数
以计算斐波那契数列作为示例,说明如何使用 BigInt 在代码中处理大数:
-------- ------------ - -- -- --- -- ------ --- --- - - --- - - --- --- ---- - - --- - - -- ---- - --- -- - --- ----- - ------ -- - ---------------------------- -- ----------------------
通过上述代码可以看出,使用 BigInt 的方法与普通的数值类型差别较小。当然,在实际开发过程中可能会遇到更为复杂的运算场景,针对具体情况选择合适的 BigInt 方法即可。
四、总结
BigInt 是一种新的基本数据类型,用于表示任意大小的整数,最大可以处理的位数为 2⁵³ - 1。BigInt 支持基本的数学运算符,并且可以很容易地使用它来处理一些超出 JavaScript 安全整数范围的计算任务。当然,也要注意它与普通数之间运算的不同之处。
当我们遇到需要处理大数类型的需求时,可以使用 BigInt 来实现,它能够避免因为位数过大而引起的精度问题,使程序更加稳定可靠。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64ad2a8248841e9894953e84