在传统的 JavaScript 中,数字类型的范围是有限制的,最大值为 Number.MAX_SAFE_INTEGER
,即 9007199254740991
。超过这个数值范围的数字会出现精度丢失的问题,导致计算结果不准确。
为了解决这个问题,ES12 标准引入了一个新的数字类型:BigInt。BigInt 可以表示任意大小的整数,解决了 JavaScript 数字范围的问题。
BigInt 的基本语法
在 JavaScript 中,使用 n
后缀来声明一个 BigInt 类型的变量。例如:
const bigNum = 123456789012345678901234567890n;
注意,BigInt 类型的变量后面必须加上 n
后缀。
BigInt 的运算
BigInt 类型的变量可以进行基本的数学运算,包括加减乘除和取余操作。例如:
const a = 123456789012345678901234567890n; const b = 987654321098765432109876543210n; console.log(a + b); // 1111111111111111111111111111111n console.log(a - b); // -864197532086419753208641975320n console.log(a * b); // 121932631137021795561786594935714636020660324509258675424100578706100n console.log(a / b); // 0n console.log(a % b); // 123456789012345678901234567890n
注意,在进行运算时,参与运算的两个变量必须是同一类型的 BigInt。如果参与运算的变量类型不同,会抛出类型错误。
BigInt 和 Number 类型的转换
BigInt 类型的变量可以通过 Number()
函数转换为 Number 类型。例如:
const bigNum = 123456789012345678901234567890n; const num = Number(bigNum); console.log(num); // 1.2345678901234568e+29
注意,转换过程中可能会出现精度丢失的问题。
相反,Number 类型的变量也可以通过 BigInt()
函数转换为 BigInt 类型。例如:
const num = 123456789012345678901234567890; const bigNum = BigInt(num); console.log(bigNum); // 123456789012345678901234567890n
BigInt 的应用场景
BigInt 主要用于处理大型数值的计算,例如密码学、金融和科学计算等领域。在这些领域中,需要处理的数字往往超出了 Number 类型的范围。
总结
ES12 标准引入了 BigInt 类型,解决了 JavaScript 数字范围的问题。BigInt 类型的变量可以进行基本的数学运算,也可以与 Number 类型的变量进行转换。BigInt 主要用于处理大型数值的计算,在密码学、金融和科学计算等领域有广泛的应用。
示例代码
-- -------------------- ---- ------- ----- - - -------------------------------- ----- - - -------------------------------- ------------- - --- -- -------------------------------- ------------- - --- -- -------------------------------- ------------- - --- -- ---------------------------------------------------------------------- ------------- - --- -- -- ------------- - --- -- ------------------------------- ----- ------ - -------------------------------- ----- --- - --------------- ----------------- -- ---------------------- ----- --- - ------------------------------- ----- ------ - ------------ -------------------- -- -------------------------------
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65fe5363d10417a222996bf6