在前端开发中,我们经常会处理数字类型的数据,而且这些数据经常会超过 JavaScript 的 Number 类型所能表示的最大值,这时就需要使用 BigInt 类型。ES2020(ES12)引入了 BigInt,它提供了一种可以用来表示任意大小整数的新数据类型。
BigInt 类型可以表示比 Number 类型更大的整数,而且在进行大整数计算时,它的精度和安全性也更高。
BigInt 的用法和 Number 基本一致,只需要在数字后加一个 n 即可,例如:const num = 1234567890123456789012345678901234567890n;
。但是,支持 BigInt 的新特性仍然有限。在本文中,我们将学习如何实现 BigInt 的加减乘除等运算。
BigInt 加法
BigInt 类型的加法运算很简单,只需要使用+
运算符即可。例如:
----- - - ---- ----- - - ---- ----- --- - - - -- -- ---
BigInt 减法
BigInt 类型的减法运算也很简单,只需要使用-
运算符即可。例如:
----- - - ---- ----- - - ---- ----- ---------- - - - -- -- ---
BigInt 乘法
BigInt 类型的乘法运算可以使用*
运算符,但需要注意的是,对于超大整数的乘法运算,直接使用*
可以导致内存溢出或导致运行时间非常长的情况。这时需要使用类似中学生手算乘法的算法,将乘法拆分为多个步骤。
以下是一个简单的 BigInt 乘法算法示例:
-------- ----------- -- - ----- ------- - -------------------- ----- ------- - -------------------- -- -------- - ------- - --- - -- ---- -- -------- ------ - - -- - ----- --------- - ----------------- --------- ----- - - ------------------- - --- ----- -- - - - --------- -- --- ----- -- - - - --------- -- --- ----- -- - - - --------- -- --- ----- -- - - - --------- -- --- ----- -- - ------------ ---- ----- -- - ------------ ---- ----- -- - ----------- - --- -- - --- - -- - --- ------ -- - --------- -- -- - --- - -- - --------- -- -- - --- -
BigInt 除法
BigInt 类型的除法运算可以使用/
运算符,但也需要注意,对于超大整数的除法运算,直接使用/
也会导致内存溢出或阻塞时间非常长的情况。
以下是一个简单的 BigInt 除法算法示例:
-------- --------- -- - -- -- --- --- - ----- --- --------------- -- ------- - ----- -------- - -- - -- -- - - --- -- -- - -- -- - - ---- - - - - -- - - - --- - - - - -- - - - --- --- -------- - --- --- --------- - -- ----- ---------- -- -- - --- ----- - --- ----- -- -- ----- -- ---------- - -------- - -------- -------- -- -- -- ------ --------- -- - -- ------ - -- ---------- - -------- - ---------- - ------ --------- -
结论
通过上述代码,我们可以看出实现 BigInt 的加减乘除运算并不是一件很简单的事情,但是实际应用中我们更多的是使用 JS 内置的运算符来进行运算。BigInt 的应用范围也比较狭窄,一般只在处理比较大的自然数时才会用到。对于普通的整数计算,还是建议使用 JS 的 Number 类型即可。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67304a05eedcc8a97c91888e