ES11 中 BigInt 扩展 -- 全方位的大数运算

ES11 中 BigInt 扩展 -- 全方位的大数运算

随着数值计算需求的增加,JavaScript 的数值类型已经无法满足我们的需求,因为在大数运算中,处理的数据不仅限于常规的数字类型,还可能是非常大的整数,这就需要引入一种新的数据类型: BigInt。

BigInt 是 ES11 引入的一种全新的数值类型,它可以表达任意大小的整数,并且可以进行大数运算。这一扩展为前端开发提供了全方位的大数运算解决方案,而且在科学计算、密码学、金融等领域都有着广泛的应用。

BigInt 基础

在 JavaScript 中,BigInt 用来表示整数,区别于 Number 类型。使用 BigInt 创建一个 BigInt 值很简单,只需要在数字结尾添加一个 n 即可。

const n = 1234567890123456789012345678901234567890n;
console.log(n); // 1234567890123456789012345678901234567890n

在 BigInt 中,可以使用大多数数学操作符:加、减、乘、乘方和取模运算。

// BigInt 加法运算
const a = 1234567890123456789012345678901234567890n;
const b = 9876543210987654321098765432109876543210n;
const c = a + b;
console.log(c); // 11111111111111111111111111111111111111100n

// BigInt 减法运算
const d = b - a;
console.log(d); // 8641975320864197532108641975318641975320n

// BigInt 乘法运算
const e = a * b;
console.log(e); // 12193263113702179541797965624558212546094761577066428969731902611263526966200n

// BigInt 乘方运算
const f = b ** 2n;
console.log(f); // 975461057300594250203637808141904665617221224231724809893458338334755609291226391068964374001n

// BigInt 取模运算
const g = b % a;
console.log(g); // 6913580246950673404130123456790123456780n

需要注意的是,BigInt 不支持与 Number 类型进行混合计算。

BigInt 的应用

在前端开发中,BigInt 主要应用在以下两个方面:

  1. 与 JavaScript Number 类型相比,BigInt 可以处理更大的整数。它在金融、科学计算等领域都有广泛的应用。例如,JavaScript 中 Number 类型最大只能表示为 2 的 53 次方,而 BigInt 的极限值可以达到 2 的 53 次方之外,取决于内存使用情况。

  2. BigInt 可以避免精度问题。在 JavaScript 中,因为 Number 类型的限制,在处理小数点位数多的计算时往往存在精度问题。例如:

const a = 0.1;
const b = 0.2;
console.log(a + b); // 输出结果为 0.30000000000000004

而使用 BigInt 可以避免这个问题,因为 BigInt 在处理整数时是没有任何误差的。

示例代码

下面是一个计算阶乘的实例代码:

function factorial(num) {
  let result = 1n;
  for (let i = 2n; i <= num; i++) {
    result *= i;
  }
  return result;
}

console.log(factorial(20n)); // 输出 2432902008176640000n
console.log(factorial(50n)); // 输出 30414093201713378043612608166064768844377641568960512000000000000n
console.log(factorial(100n)); // 输出 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000n

在这个例子中,我们通过 BigInt 类型计算了 20、50 和 100 的阶乘值。由于 BigInt 允许我们处理超过 Number 类型限制的大型数值,所以我们能够准确地得出这些值。

总结

BigInt 作为一个全新的数值类型,在前端领域将会得到广泛的应用。相较于 JavaScript 的 Number 类型,它能够更好地处理大型数值和避免精度问题,为开发人员提供了一个全方位的大数运算解决方案。在使用 BigInt 的过程中,需要注意与 Number 类型的混合计算是不允许的。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/659e40c3add4f0e0ff7475f5


纠错反馈