如何使用 ES10 中的 BigInt 与 Number 的互转

阅读时长 5 分钟读完

前言

随着 JavaScript 在大规模数据处理和高精度计算方面的使用越来越普遍,ES10 新增了 BigInt 这个新的原始类型,以满足我们对于数值范围的需求。同时,也提供了一种新的从 BigInt 到 Number 的转换方式,旧有的方法也适配了 BigInt 类型。在这篇文章中,我将向你介绍 BigInt 的基础知识以及 BigInt 和 Number 的互转方式,并提供详细的示例代码,相信可以帮助你更好地了解 BigInt 的使用。

BigInt 基础知识

BigInt 是 ES10 中的新原始类型,用于表示任意精度的整数。在实际开发中,我们通常会遇到以下情况需要使用 BigInt:

  • 处理超出 Number 类型能够表示的最大值或最小值的数值,如 Number.MAX_SAFE_INTEGER + 1Number.MIN_SAFE_INTEGER - 1
  • 执行高精度计算,例如计算十进制数的阶乘等。

在 BigInt 中,数值可以使用一般的数值语法,唯一的区别是在数字后加一个 n

需要注意的是,在 BigInt 中,我们不能使用一些常规的运算符,如 +-*/ 等,而应该使用 BigInt 对应的方法。同时,BigInt 也不能与 Number 直接进行运算,需要在其中一个数值上调用 BigInt() 进行转换。

BigInt 和 Number 的互转

在实际开发中,我们可能会需要在 BigInt 和 Number 之间进行转换,其中 ES10 提供了以下 3 种方式:

1. 使用 BigInt 构造函数

我们可以使用 BigInt() 构造函数将 Number 转换为 BigInt。不过,需要注意的是,如果 Number 超出了 BigInt 能表示的范围,则会产生精度损失,转换后的 BigInt 值与原来的 Number 值可能不一样。

2. 使用模板字面量

在模板字面量中,我们可以使用 ${} 将 BigInt 变量转换为字符串,然后使用 parseInt() 函数将其字符串参数解析为 Number 类型,从而将 BigInt 转换为 Number。

3. 使用位运算符

这是一种既简单又高效的 BigInt 和 Number 互转方式。我们可以使用左移运算符 << 将 BigInt 转换为 Number,使用右移运算符 >> 将 Number 转换为 BigInt。

你可能会问,为什么 << 0 可以将 BigInt 转换为 Number 呢?在 ECMAScript 规范中,位运算符只能对 Number 类型的值执行,当遇到 BigInt 类型值时,会将其强制转换为 Number 类型。由于 Number 的精度范围无法表示 BigInt 的所有值,因此在转换时可能会丢失精度,建议在使用时谨慎考虑。

示例代码

下面是一些使用 BigInt 和 Number 的示例代码:

-- -------------------- ---- -------
-- ------
-------- ------------ -
  --- ------ - ---
  --- ---- - - --- - -- -- ---- -
    ------ -- --
  -
  ------ -------
-

-- ------ --- ------
----- ---------- - --------------------------------
----- ---------------- - ------------             -- ------
----- ---------------- - ----------------- ------------ -- ------

-- ------ --- ------
----- ------ - ----
----- --------------- - ---------------

-- ------
----- ----------- - --------------------------------
----- ---------------- - ----------- -- --       -- ------
----- ------- - ----
----- ---------------- - ------- -- ---           -- ------
展开代码

小结

在本文中,我们介绍了 BigInt 的基础知识,以及 BigInt 和 Number 之间的 3 种互转方式,并提供了详细的示例代码。通过本文的学习,相信你已经掌握了 BigInt 的基本使用和相关技术知识,也会在实际开发中灵活运用这一知识点。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67949d8f504e4ea9bd935474

纠错
反馈

纠错反馈