前言
在前端应用中,经常会涉及到整数计算,但是普通的整数类型无法支持极大整数的运算。在 ECMAScript 2020 中引入了一个新的 BigInt 类型,可以处理超过 253 -1 的整数。本文将介绍如何在 ES 中使用 BigInt 类型处理极大整数运算。
- BigInt 类型的基本概念
在 ES 中,BigInt 类型是一个用来表示任意精度整数的新类型。它可以处理超过常规数值类型能够表示的数值范围。BigInt 类型的字面量表示方法是在整数后面加一个 n,例如 1234567890n。
BigInt 类型与普通整数类型(如 Number)有以下区别:
- BigInt 类型表示的整数范围与精度不受限制,而普通整数类型只能表示在特定范围内的整数;
- BigInt 类型不支持小数,只能表示整数;
- BigInt 类型不支持运算符重载,不能与普通数值类型进行运算;
- BigInt 类型的基本使用
在 ES 中,我们可以使用 BigInt() 函数将任意精度的十进制整数转化为 BigInt 类型。例如:
const num = BigInt("12345678901234567890");
使用 BigInt 时需要注意以下几点:
- BigInt 类型不能使用 Number 类型的运算符,如 +、-、*、/;
- BigInt 类型有自己独立的运算符,如 **(幂运算)、%(模运算);
- 当进行运算时,如果两个值的类型不同,将会自动转化为 BigInt 类型再运算;
下面是一些 BigInt 类型的示例代码:
// 声明一个 BigInt 类型的变量 const bigIntNum = BigInt(12345678901234567890);
// BigInt 进行加减乘除运算 const result1 = bigIntNum + BigInt(123456); const result2 = bigIntNum - BigInt(123456); const result3 = bigIntNum * BigInt(123456); const result4 = bigIntNum / BigInt(123456);
// BigInt 进行幂运算和模运算 const result5 = bigIntNum ** BigInt(10); const result6 = bigIntNum % BigInt(123);
// BigInt 与普通数值类型的运算 const result7 = bigIntNum + 123456; // BigInt 类型与 Number 相加,结果仍为 BigInt 类型 const result8 = bigIntNum - 123456; // 同上 const result9 = bigIntNum * 123456; // 同上 const result10 = bigIntNum / 123456; // 同上
- 使用 BigInt 类型处理极大整数运算
经过上面的介绍,我们已经了解了 BigInt 类型的基本使用方法,下面将结合实际例子来说明如何处理极大整数运算。
例如,计算 999999 的阶乘:
// 普通整数类型只能表示到 995.,BigInt 可以轻易处理更高位数的阶乘 function factorial(n) { if (n < 0) return; if (n === 0) return 1n; let result = 1n; for (let i = 1n; i <= n; i++) { result *= i; } return result; } console.log(factorial(999999)); // 4746433113662326762131860772283631777414638242241370365403172343657559490961538041267985698049513614330911559716387426530530229567693520882941087363236895466812595539899970557486700446874749399422607828025814909988285027544444615677524230192073703264811793863271713093670783718600599486651754761425737989251676785637328135560912349649771951826564984200887084478796640834707764659058191533328643760513887507208072511815224731222507608710428592844481966174720984507421896359809288443786515647751329064990332195469387282855259303835351665166199651778614962596983233576617007864534622333924356075066049929787766861278243271992482958709021449159267999579269158769495825794212522493823586880960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000n
在上面的代码中,我们使用了 BigInt 类型的乘法运算符 *,并且设置 result 变量的初值为 1n,以确保乘积仍然是一个 BigInt 类型。
- 总结
在本文中,我们介绍了 BigInt 类型的基本概念和使用方法,并且结合具体例子说明了如何使用 BigInt 类型处理极大整数运算。在实际开发中,应该注意 BigInt 类型的限制和区别,合理使用 BigInt 类型来提高运算精度和准确性。
参考文献
- BigInt MDN
- What are BigInts in JavaScript?, a 2 minute series video by Valeri Karpov
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a911f348841e9894560538