在 JavaScript 中,整数的范围是有限的。在过去,我们通过使用一些库或者自己实现的一些算法来处理大整数。但是,自从 ECMAScript 2019 引入了 BigInt,我们可以在原生 JavaScript 中轻松地处理大整数了。
什么是 BigInt
BigInt 是一种新的 JavaScript 基本类型,它可以表示任意精度的整数。它的范围比 Number 类型要大得多,可以处理比 JavaScript 原生整数范围更大的整数。
BigInt 是通过在整数值后面加上 n 或者使用 BigInt() 构造函数来创建的。例如:
const big1 = 123456789012345678901234567890n; const big2 = BigInt("123456789012345678901234567890");
如何使用 BigInt
BigInt 和 Number 有一些不同之处。它们之间不能进行混合运算,也不能直接比较大小。因此,我们需要使用 BigInt 提供的一些方法来进行运算和比较。
运算符
BigInt 支持大部分的运算符,如加减乘除、求余数、左右移位等。但是,它们的运算符和 Number 不同,要注意使用。例如:
// javascriptcn.com 代码示例 const big1 = 123456789012345678901234567890n; const big2 = 987654321098765432109876543210n; console.log(big1 + big2); // 1111111111111111111111111111111n console.log(big1 - big2); // -864197532086419753208641975320n console.log(big1 * big2); // 12193263113702179584909625919498942064060917970161767603100n console.log(big1 / big2); // 0n console.log(big1 % big2); // 123456789012345678901234567890n console.log(big1 << 2); // 493827156049382716806172295560n console.log(big1 >> 2); // 30864197253086419722530864197n
方法
BigInt 也提供了一些方法来进行运算和比较。例如:
// javascriptcn.com 代码示例 const big1 = 123456789012345678901234567890n; const big2 = 987654321098765432109876543210n; console.log(big1.add(big2)); // 1111111111111111111111111111111n console.log(big1.subtract(big2)); // -864197532086419753208641975320n console.log(big1.multiply(big2)); // 12193263113702179584909625919498942064060917970161767603100n console.log(big1.divide(big2)); // 0n console.log(big1.remainder(big2)); // 123456789012345678901234567890n console.log(big1.shiftLeft(2)); // 493827156049382716806172295560n console.log(big1.shiftRight(2)); // 30864197253086419722530864197n console.log(big1.compare(big2)); // -1
示例代码
下面是一个使用 BigInt 计算斐波那契数列的例子:
// javascriptcn.com 代码示例 function fibonacci(n) { let a = 0n, b = 1n; for (let i = 0n; i < n; i++) { [a, b] = [b, a + b]; } return a; } console.log(fibonacci(100)); // 354224848179261915075n
总结
通过 BigInt,我们可以轻松地处理大整数,而无需使用第三方库或者自己实现算法。但是,要注意 BigInt 和 Number 的不同之处,使用正确的方法和运算符来处理 BigInt。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/657d0f74d2f5e1655d7dadb0