在过去的 JavaScript 版本中,处理大整数以及执行大数字计算是一件相当繁琐的事情。要么需要借助于外部库来实现,要么需要自己实现一套计算机制,这个过程中不仅需要大量的代码,而且容易出现漏洞,导致不稳定的运行环境。
幸运的是,ECMAScript 2020 (ES11) JavaScript 版本很好地解决了这个问题,使得大整数处理以及计算变得相对简单起来。在这篇文章中,我们将详细介绍 ECMAScript 2020 中的大整数处理指导,并提供示例代码,帮助您更好地理解和掌握这项新技术。
BigInt 类型
在 ES11 中,BigInt 类型被引入到了 JavaScript 中,它可以表示整数,无论这些整数有多么大,这些整数都不会失去精度。BigInt 类型的最大值取决于计算机的内存大小,因此它可以轻易处理比 Number 类型更大的数字。
我们可以声明 BigInt 变量的方式与 Number 类型类似,只是需要在数字后面添加一个 n 后缀,例如:
let bigNumber = 1234567890123456789012345678901234567890n;
也可以使用工厂函数 BigInt() 来创建 BigInt 类型的数字,例如:
let bigNumber = BigInt("1234567890123456789012345678901234567890");
关于 BigInt 类型,需要注意以下几点:
- 与 Number 类型不同,BigInt 类型不支持使用 Math 对象上的函数,这是因为 Math 对象使用的都是 Number 数据类型。
- BigInt 类型不支持使用浮点类型的数学运算符,如 +、-、/ 和 %,需要使用 BigInt 自己的函数。
- BigInt 与 Number 可以进行混合运算,但是需要使用 BigInt() 来将 Number 类型转换成 BigInt 类型,否则运算结果将失去精度。
大整数运算示例
下面我们通过一些示例代码来说明 BigInt 类型处理大整数的实际运用过程。
加法运算
BigInt 类型支持使用 + 运算符进行加法运算。例如:
let a = 1234567890n; let b = 9876543210n; let c = a + b;
减法运算
BigInt 类型支持使用 - 运算符进行减法运算。例如:
let a = 9876543210n; let b = 1234567890n; let c = a - b;
乘法运算
BigInt 类型支持使用 * 运算符进行乘法运算。例如:
let a = 12345678901234567890n; let b = 98765432101234567890n; let c = a * b;
除法运算
BigInt 类型不支持使用 / 运算符进行除法运算,需要使用 BigInt 自己的函数 BigInt.asUintN() 和 BigInt.asIntN() 进行计算。
let a = 100n; let b = 3n; let quotient = BigInt.asIntN(0, a / b); // 等价于 let quotient = Math.floor(a / b); let remainder = a % b;
幂运算
BigInt 类型不支持使用 ** 运算符进行幂运算,需要使用 BigInt 自己的函数 BigInt.asUintN() 和 BigInt.asIntN() 进行计算。
let a = 123n; let b = 456n; let c = BigInt.asUintN(0, a ** b); // 等价于 let c = Math.pow(a, b);
总结
通过前文所述内容,我们可以看出,在 ES11 中,BigInt 类型为 JavaScript 带来了处理大整数以及计算大数字的能力。同时,它提供了一套可靠的计算机制,避免了手工编写大量代码,也避免了手工编写出现错误的可能性。
因此,我们需要在实际应用开发中,注意 BigInt 类型与 Number 类型之间的区别,以免出现计算精度错误的情况。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647826d4968c7c53b04691e6