在 ECMAScript 2020 标准中,新增了一个全新的类型 BigInt,通过引入 BigInt 类型,JavaScript 程序员现在可以在开发过程中更加方便地处理大数值,同时在表示和计算大整数时也可以避免数值计算溢出的问题。
BigInt 类型
BigInt 类型是一种全新的数值类型,它允许我们表示具有任意精度的数值。在语法上,BigInt 使用正整数,但是它不跟随 Number 类型的 IEEE-754 标准,所以 BigInt 类型可以表示比 Number 类型更大的数值,最大值的表示范围可达 $2^{53}-1$,而 BigInt 类型不受此限制。
声明 BigInt 类型的变量时,需要以大写字母 N 结尾:
const bigIntNum = 12345678901234567890123456789012345678901234567890n;
BigInt 的运算
BigInt 类型支持 Number 类型中的大多数运算符,并新增了一些运算符。
基本运算符
const a = 9007199254740991n; const b = 1n; console.log(a + b); // 9007199254740992n console.log(a - b); // 9007199254740990n console.log(a * b); // 9007199254740991n console.log(a / b); // 9007199254740991n console.log(a % b); // 0n
比较运算符
// javascriptcn.com 代码示例 const a = 9007199254740991n; const b = 1n; console.log(a > b); // true console.log(a >= b); // true console.log(a < b); // false console.log(a <= b); // false console.log(a === b); // false console.log(a !== b); // true
其他运算符
BigInt 中还新增了 ** 幂运算符(后置)
const a = 10n; const b = 50n; console.log(a ** 10n); // 10000000000n console.log(b ** a); // 100000000000000000000000000000000000000000000000000000000000000000000000000n
BigInt 的类型转换
BigInt 类型只支持转换成字符串、Number 类型、BigInt 类型,并且我们可以通过字符串、Number 类型或者 BigInt 类型来实现 BigInt 之间的转换。
字符串转为 BigInt
console.log(BigInt("123456789")); // 123456789n console.log(BigInt("90071992547409912")); // 90071992547409912n
Number 转换为 BigInt
由于 Number 类型可能存在计算精度的问题,所以在将 Number 类型转换为 BigInt 类型时需要注意是否会产生溢出的问题:
console.log(BigInt(123456789)); // 123456789n console.log(BigInt(Number.MAX_SAFE_INTEGER)); // 9007199254740991n
BigInt 转换为字符串
console.log(12345678901234567890123456789012345678901234567890n.toString()); // "12345678901234567890123456789012345678901234567890"
BigInt 转换为 Number
需要注意在将 BigInt 转换为 Number 类型时,如果 BigInt 的数值范围超出了 Number 的最大表示范围,会产生精度丢失的问题:
console.log(Number(12345678901234567890123456789012345678901234567890n)); // Infinity console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
BigInt 与正常数值的混用
在处理 BigInt 类型时,不能直接与 Number 类型进行运算,需要通过类型转换来一起参与数值运算。
const num1 = 12345n; const num2 = 12345; console.log(num1 * BigInt(num2)); // 152399025n
总结
BigInt 类型的引入给 JavaScript 中处理大数值的程序带来了很大的方便。在日常的开发中,我们经常会需要使用 BigInt 类型的功能,尤其是在一些涉及到加密算法、大型计算、金融领域等方面。我们可以通过以上的介绍来理解 BigInt 类型的基本特点和使用方式,以及注意与正常数值的混用等问题。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65864248d2f5e1655d0a2c7d