ES11 引入了一种新的数字类型:BigInt,用于表示超出 JS Number 范围的整数。而对于超出 JS Number 范围的数字,我们通常需要进行 BigInt 和 Number 的相互转换。在本文中,我们将详细介绍 BigInt 和 Number 的转换方式,以及它们的使用方法和指导意义。
BigInt 类型
BigInt 类型用于表示任意精度的整数,可用来处理大数字的计算。和 JS Number 类型不同的是,BigInt 类型没有上限,可以表示任意大的整数。BigInt 类型使用 n 作为后缀表示一个 BigInt 数字,例如:
const x = 9007199254740991n; // 注意 n 后缀
BigInt 和 Number 的转换
由于 BigInt 是一种新的数字类型,因此我们可能需要将其转换为 JS 原生的 Number 类型以进行运算。同样地,对于超出 Number 范围的数字,我们也需要先将其转换为 BigInt 类型。
BigInt 转为 Number
将 BigInt 转为 Number 类型,可以使用 Number()
命令或 +'0n'
的方式,例如:
const bigIntNum = 123456789123456789123456789n; const numberNum = Number(bigIntNum); // 1.2345678912345679e+26 const numberNum2 = +`${bigIntNum}`; // 1.2345678912345679e+26
其中,通过在 BigInt 值前添加空字符,可以将其转换为字符串;再利用加号运算符将其转换为 Number 类型,这种方式通常比 Number()
转换方式更加高效。
Number 转为 BigInt
将 Number 转为 BigInt 类型,可以使用 BigInt()
命令或将数字值用 n
后缀包裹,例如:
const bigIntNum = BigInt(123456789123456789123456789); // 123456789123456789123456789n const bigIntNum2 = 123456789123456789123456789n; // 123456789123456789123456789n
注意,如果将一个超出 BigInt 范围的数字转换为 BigInt 类型,则会导致精度损失。
BigInt 的使用
BigInt 类型可以与 JS 常规数字类型进行运算,以及使用 +
, -
, *
, /
, %
和 **
等运算符进行基本运算。BigInt 类型也可以使用包含 BigInt 的数组内部存在 BigInt 的运算和方法使用。
例如,下面的代码演示了 BigInt 的常见使用场景:
-- -------------------- ---- ------- ----- ------ - ------------ ----- --------- - ---- ----- --- - ------ - ------------------ -- ---- ----- ---- - ------ - ---------- -- ----- ----- ------- - ------ - ------------------ -- ------ ----- -------- - ------ - ---------- -- --- ----- --------- - ------ - ------------------ -- ---- ----- ----- - ------ -- ------------------ -- -------------------------------------------------------------------------- ----- -------- - ---- --- ---- ----- -------- - ------------------- -- -- - - -- ---- -- -- ----- ---------- - ------------------------------ -- --
总结
在 ES11 中,BigInt 被用于表示超出 JS Number 范围的数字,可以更好地处理大数字的计算。在对超大整数进行运算和计算时,我们需要灵活使用 BigInt 和 Number 之间的转换方式。掌握 BigInt 和 Number 的转换方式及其使用,有助于我们更好地开发 JS 应用程序,并处理超大数字值的计算,提高应用程序的稳定性和性能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648abb7048841e98948d87da