前言
随着 JavaScript 在大规模数据处理和高精度计算方面的使用越来越普遍,ES10 新增了 BigInt 这个新的原始类型,以满足我们对于数值范围的需求。同时,也提供了一种新的从 BigInt 到 Number 的转换方式,旧有的方法也适配了 BigInt 类型。在这篇文章中,我将向你介绍 BigInt 的基础知识以及 BigInt 和 Number 的互转方式,并提供详细的示例代码,相信可以帮助你更好地了解 BigInt 的使用。
BigInt 基础知识
BigInt 是 ES10 中的新原始类型,用于表示任意精度的整数。在实际开发中,我们通常会遇到以下情况需要使用 BigInt:
- 处理超出 Number 类型能够表示的最大值或最小值的数值,如
Number.MAX_SAFE_INTEGER + 1
或Number.MIN_SAFE_INTEGER - 1
。 - 执行高精度计算,例如计算十进制数的阶乘等。
在 BigInt 中,数值可以使用一般的数值语法,唯一的区别是在数字后加一个 n
:
const bigInteger = 1234567890123456789012345678901234567890n;
需要注意的是,在 BigInt 中,我们不能使用一些常规的运算符,如 +
、-
、*
、/
等,而应该使用 BigInt 对应的方法。同时,BigInt 也不能与 Number 直接进行运算,需要在其中一个数值上调用 BigInt()
进行转换。
BigInt 和 Number 的互转
在实际开发中,我们可能会需要在 BigInt 和 Number 之间进行转换,其中 ES10 提供了以下 3 种方式:
1. 使用 BigInt 构造函数
我们可以使用 BigInt()
构造函数将 Number 转换为 BigInt。不过,需要注意的是,如果 Number 超出了 BigInt 能表示的范围,则会产生精度损失,转换后的 BigInt 值与原来的 Number 值可能不一样。
const bigInteger = BigInt(123); // BigInt const convertedNumber = Number(bigInteger); // number
2. 使用模板字面量
在模板字面量中,我们可以使用 ${}
将 BigInt 变量转换为字符串,然后使用 parseInt()
函数将其字符串参数解析为 Number 类型,从而将 BigInt 转换为 Number。
const bigInteger = 123n; // BigInt const convertedNumber = parseInt(`${bigInteger}`); // number
3. 使用位运算符
这是一种既简单又高效的 BigInt 和 Number 互转方式。我们可以使用左移运算符 <<
将 BigInt 转换为 Number,使用右移运算符 >>
将 Number 转换为 BigInt。
const bigInteger = 123n; // BigInt const convertedNumber = bigInteger << 0; // number
你可能会问,为什么 << 0
可以将 BigInt 转换为 Number 呢?在 ECMAScript 规范中,位运算符只能对 Number 类型的值执行,当遇到 BigInt 类型值时,会将其强制转换为 Number 类型。由于 Number 的精度范围无法表示 BigInt 的所有值,因此在转换时可能会丢失精度,建议在使用时谨慎考虑。
示例代码
下面是一些使用 BigInt 和 Number 的示例代码:
-- -------------------- ---- ------- -- ------ -------- ------------ - --- ------ - --- --- ---- - - --- - -- -- ---- - ------ -- -- - ------ ------- - -- ------ --- ------ ----- ---------- - -------------------------------- ----- ---------------- - ------------ -- ------ ----- ---------------- - ----------------- ------------ -- ------ -- ------ --- ------ ----- ------ - ---- ----- --------------- - --------------- -- ------ ----- ----------- - -------------------------------- ----- ---------------- - ----------- -- -- -- ------ ----- ------- - ---- ----- ---------------- - ------- -- --- -- ------展开代码
小结
在本文中,我们介绍了 BigInt 的基础知识,以及 BigInt 和 Number 之间的 3 种互转方式,并提供了详细的示例代码。通过本文的学习,相信你已经掌握了 BigInt 的基本使用和相关技术知识,也会在实际开发中灵活运用这一知识点。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67949d8f504e4ea9bd935474