在 ES2021 中使用 JavaScript 的序列化方法!

阅读时长 6 分钟读完

JavaScript 的序列化方法是将对象、数组或其他可序列化的值转换为字符串以进行存储或传输的过程。在 ES2021 中,一些新的序列化方法被引入,这些方法提供了更多的选项和性能优化。在本文中,我们将介绍这些新方法,并提供一些示例代码来说明它们的用法。

原有的序列化方法

在 ES5 中引入的 JSON.stringify()方法是最常用的序列化方法。这个方法会将 JavaScript 对象转化为字符串,并将其存储或传输到另一个地方。序列化对象的方法非常便捷,而且很容易通过反序列化来将其还原成对象。

以下是 JSON.stringify()的基本使用示例:

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

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

通过 JSON.parse(),我们可以将字符串转换为 JavaScript 对象:

新的序列化方法

在 ES2021 中引入了以下的新序列化方法:

  • StructuredClone.serialize():这个方法使用了浏览器内置的序列化算法,能够序列化更多的值类型,而不仅限于 JSON 格式所支持的值类型。
  • Transferable Structured Clone:这个是一项 WebSocket 标准,它提供了一种更快且更灵活的序列化方式,可以在不同的浏览器窗口之间传输对象。

在这篇文章中,我们将会重点关注 StructuredClone.serialize() 方法。

使用 StructuredClone.serialize() 序列化对象

StructuredClone.serialize() 方法使用自定义的算法,可以轻松地序列化包括函数、循环引用和一些原生对象(例如 MapSet)等值类型。以下是 StructuredClone.serialize() 的基础使用示例:

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

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

这里的 serialized 是一个 ArrayBuffer 类型的值,它仅仅是包含了序列化信息的一个二进制数据,为了转换成字符串,我们需要将它通过 TextDecoder 解码:

decoder.decode() 方法会解码 serialized,得到以下输出:

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

StructuredClone.serializeInto()StructuredClone.deserialize() 方法

StructuredClone.serializeInto()StructuredClone.deserialize() 方法引入了更多的选项,使得序列化和反序列化更加灵活。

StructuredClone.serializeInto() 方法可以将序列化信息保存到一个已有的 ArrayBuffer 中,并指定它的起始位置和总长度。

以下是 StructuredClone.serializeInto() 的使用示例:

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

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

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

StructuredClone.deserialize() 方法用于将 ArrayBuffer 转换成 JavaScript 对象,并提供了对保存元数据的支持。

以下是 StructuredClone.deserialize() 的使用示例:

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

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

总结

在 ES2021 中,JavaScript 序列化方法从 JSON.stringify() 扩展到了更为丰富和优化的形式。StructuredClone.serialize() 和相关方法使得更多元数据的保存和数据类型的序列化成为了可能。读者可以根据业务场景和自身需要选择适合自己的序列化方法。

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

纠错
反馈