ES10 中更安全的 JSON.stringify 方法用法

阅读时长 3 分钟读完

在前端开发中,我们经常需要处理 JSON 数据。而在数据序列化时,我们通常使用 JSON.stringify() 方法将 JavaScript 对象转换为 JSON 字符串。但是,JSON.stringify() 方法在处理某些数据类型时可能会发生异常,比如循环引用。ES10 为我们提供了一个更安全的 JSON.stringify() 方法——JSON.stringify() 的第二个参数 replacer 函数的两个新参数——spacer 和 placeholder。

spacer 参数

在以前的 JSON.stringify() 版本中,我们只能用一个参数来控制输出的格式。但在 ES10 中,我们可以通过 spacer 参数来控制缩进的样式,使输出的 JSON 代码更易读。

spacer 参数是一个字符串或者整数,取值为 0 到 10 之间的整数。当该参数为字符串时,JSON 字符串的每一行都将以该字符串的形式进行缩进。当该参数为整数时,JSON 字符串的每一行都将缩进该整数倍数的空格。下面是一个示例:

输出结果:

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

可以看到,我们通过 spacer 参数的设定,让输出的 JSON 字符串更加美观易读。

placeholder 参数

JSON.stringify() 方法中,placeholder 参数用于解决 JSON 序列化中的循环引用问题。如果 JSON.stringify() 函数的嵌套参数对象含有循环引用的对象,就会出现TypeError: Converting circular structure to JSON。

为了解决这个问题,ES10 新增了一个可选参数 placeholder,它的作用是给序列化结果中的循环引用对象替换成字符串。示例如下:

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

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

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

当 user.self = user 时,如果我们不使用 placeholder 参数,JSON.stringify() 会抛出 TypeError: Converting circular structure to JSON。然而,通过如上代码的使用,我们可以将 self 属性替换成字符串“[Circular ~]”,从而避免了异常的产生,更加安全可靠。

总结

ES10 中更安全的 JSON.stringify() 方法,通过第二个参数 replacer 函数的两个新参数——spacer 和 placeholder,解决了在序列化 JSON 时因循环引用等问题带来的异常问题。因此,在日常开发工作中,我们可以更加放心地使用 JSON.stringify() 方法进行数据的序列化,避免出现异常错误。

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

纠错
反馈