ECMAScript 2020 带来了一些新的 JavaScript 特性,其中之一就是 BigInt。BigInt 允许我们超出 JavaScript 的 Number 类型的最大值范围进行数学运算。这篇文章将会介绍 BigInt,讲述其如何使用以及为什么会对开发有帮助。
为什么需要 BigInt
JavaScript 中的 Number 类型使用 IEEE 754 标准来表示数字,其有效值范围为 $-2^{53}$ 到 $2^{53}-1$,超出这个范围的整数将无法精确表示。在某些领域,如密码学、数据加密和精确计算,需要使用大型整数进行数学运算。
在以前的代码中,定义一个超出 Number 类型范围的整数会导致其显示为 0 或者错误的结果。
const a = 9999999999999999; console.log(a); // 输出: 10000000000000000
尽管上面的代码中 $a$ 的值为 9999999999999999,但最终输出结果是 10000000000000000。这是因为 $a$ 已经超出了 JavaScript 的 Number 类型的有效值范围。
为了解决这个问题,BigInt 被引入到 JavaScript 中。
使用 BigInt
BigInt 使用后缀 n 来表示,因此我们可以使用类似于 $10n$ 的语法来定义 BigInt。
const a = 10n; console.log(a); // 输出: 10n
我们可以通过 BigInt() 构造函数将 Number 类型转换为 BigInt 类型。
const a = BigInt(10); console.log(a); // 输出: 10n
BigInt 支持所有标准算术运算符,包括加减乘除、求幂和求余数等操作。
console.log(10n + 1n); // 输出: 11n console.log(10n - 1n); // 输出: 9n console.log(10n * 2n); // 输出: 20n console.log(10n / 3n); // 输出: 3n console.log(10n ** 3n); // 输出: 1000n console.log(10n % 3n); // 输出: 1n
需要注意的是,BigInt 与 Number 类型不能混合使用,否则会抛出异常。
console.log(10n + 10); // 抛出异常
BigInt 的指导意义
BigInt 的引入使得 JavaScript 可以支持超出 Number 类型范围的整数运算,这对于需要进行精确计算的应用程序非常有帮助。例如,BigInt 可以用于比特币交易的加密和签名过程中。
此外,BigInt 也可以使生产力更高,因为它允许开发人员编写更少的代码来处理大的整数。例如,假设我们要将两个超过 Number 类型范围的整数相加,我们可以使用 BigInt 稍微更改原始代码:
const a = BigInt("999999999999999999999999") // 超过 Number 类型范围的整数 const b = BigInt("1000000000000000000000000") // 超过 Number 类型范围的整数 console.log(a + b);
如果我们要通过使用 Number 类型来实现同样的事情,就需要编写大量的代码:
-- -------------------- ---- ------- ----- - - -------------------------- -- -- ------ ------------- ----- - - --------------------------- -- -- ------ ------------- -- -------------------------------- ----- ---- - ------------- ------------------ ----- ---- - ------------- ------------------ ----- ------ - --- --- ----- - -- --- ---- - - -- - - ----------- -- - - ----------- -- ------ ---- - ----- --- - -------- -- -- - -------- -- -- - ------ --------------- - ---- ----- - -------------- - ---- - ---------------------------------------
可以看到,使用 BigInt 执行此操作显然更简单,更易于阅读和理解。
结论
BigInt 是一个非常有用的功能,它允许我们超越标准数值范围来完成数学运算。在日常开发中,虽然很少遇到大整数的确切要求,但是 BigInt 对于某些密集型计算和安全操作可能会发挥作用。
在使用 BigInt 时,需要注意它与 Number 类型之间的差异,以避免出现不必要的错误或异常。最后,可以通过 BigInt 帮助我们写出更少和更简洁的代码。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67762d136d66e0f9aa0b1dbe