在前端开发中,我们经常需要处理 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 字符串的每一行都将缩进该整数倍数的空格。下面是一个示例:
let data = { name: 'John Doe', age: 30, hobbies: ['Coding', 'Music'], address: { city: 'New York', zip: '10001' } }; let jsonString = JSON.stringify(data, null, 2); console.log(jsonString);
输出结果:
-- -------------------- ---- ------- - ------- ----- ----- ------ --- ---------- - --------- ------- -- ---------- - ------- ---- ------ ------ ------- - -
可以看到,我们通过 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