ECMAScript 2020 (ES11) 中的了解大整数 BigInt 和使用 BigInt 作为序列化的 JSON

阅读时长 4 分钟读完

在ECMAScript 2020 (ES11)的新特性中,我们看到了BigInt。BigInt是一种新的基本数据类型,用于表示任意大的整数。在过去,JavaScript 中最大的整数是2^53-1,但现在Javascript可以表示任意大的整数。

为什么需要 BigInt?

当我们在进行数学运算的时候,可能会涉及到很大的数字,而原生 Number 类型只能表示[-9007199254740991, 9007199254740991]之间的整数。对于超出这个范围的数字,我们无法进行运算。因此,BigInt应运而生,它能够处理任意大小的整数,没有上限。

如何创建 BigInt?

在Javascript 中,我们可以使用带 n 后缀的数字字面量或者使用 BigInt() 函数来创建 BigInt 对象。

例如:

BigInt类型的运算

我们可以使用与普通数值类型相同的运算符,例如加、减、乘和除等来处理BigInt对象。

例如:

需要注意的是,当使用除法运算符 / 时,BigInt 类型的结果将向下取整,因此结果可能为0。

BigInt 与 JSON 序列化

BigInt 并未被包含在 JSON 标准中。因此,当我们需要将 BigInt 转换为 JSON 时,我们需要进行一些额外的处理。

在 ECMAScript 2020 (ES11) 中,我们可以使用 JSON.stringify() 方法的 replacer 函数或 reviver 函数来处理 BigInt 的序列化和反序列化。

自定义序列化器 (replacer)

在序列化过程中,如果我们希望将 BigInt 转换为字符串而不是在序列化期间将其舍弃,则可以在 JSON.stringify() 函数中传入一个 replacer 函数。我们可以使用该函数将 BigInt 替换为其字符串表示。

例如:

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

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

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

上面的代码将 1n 转换为了字符串 "1"。

自定义反序列化器 (reviver)

在反序列化时,当我们需要将 JSON 字符串中的字符串转换回 BigInt 时,我们可以传递一个 reviver 函数来反序列化 BigInt 类型的值。

例如:

在例子中,我们使用 reviver 函数将字符串 "1" 转换回了 BigInt 类型的数字 1n。

结论

在 ECMAScript 2020 (ES11) 中,BigInt 是一项强大而实用的新特性。它可以处理数字运算中的大数字,并且可以通过一些技巧将 BigInt 转换为 JSON 格式。我们可以使用 BigInt 来处理一些需要处理更大数字的问题,例如加密等。

总之,了解 BigInt 类型并使用它来处理较大的数字非常重要。

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

纠错
反馈