ES9 中新增的 JSON.stringify() 方法的使用方法

阅读时长 6 分钟读完

在 ES9 中,新增了一个非常实用的方法,即 JSON.stringify() 方法的改进版。这个方法可以帮助我们更方便地将 JavaScript 对象转换为 JSON 字符串,同时还可以处理一些特殊情况,例如循环引用、Symbol 类型等等。本文将详细介绍这个方法的使用方法,并提供示例代码,希望能够帮助读者更好地掌握这个新特性。

JSON.stringify() 方法的基本用法

JSON.stringify() 方法是用来将 JavaScript 对象转换为 JSON 字符串的方法。它接受两个参数:第一个参数是要转换的对象,第二个参数是一个可选的转换选项。如果不传入第二个参数,那么默认情况下,转换出来的 JSON 字符串中不会包含任何空格和换行符,这样可以减小字符串的长度,提高传输效率。下面是一个最基本的例子:

在上面的例子中,我们定义了一个 JavaScript 对象 obj,然后使用 JSON.stringify() 方法将它转换为 JSON 字符串,并将结果输出到控制台。可以看到,转换出来的字符串中,每个键值对都用双引号包裹,键和值之间用冒号分隔,多个键值对之间用逗号分隔。

处理循环引用

在实际开发中,我们有时会遇到对象之间相互引用的情况,例如下面这个例子:

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

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

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

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

在上面的例子中,我们定义了两个对象 obj1 和 obj2,然后将它们相互引用。如果我们直接使用 JSON.stringify() 方法将 obj1 转换为 JSON 字符串,会发现抛出了一个 TypeError 的异常:

这是因为 JSON.stringify() 方法默认情况下不能处理循环引用的情况。但是在 ES9 中,我们可以通过传入一个新的选项参数,即 replacer 函数,来解决这个问题。replacer 函数可以接受两个参数:键和值,可以返回一个新的值来代替原始值。我们可以利用这个函数来遍历对象,并在遇到循环引用的情况下返回一个标记,来告诉 JSON.stringify() 方法如何处理这个循环引用。下面是一个例子:

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

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

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

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

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

在上面的例子中,我们传入了一个 replacer 函数,它会检查当前的键和值是否符合我们的循环引用的条件,如果符合,就返回一个特殊的字符串 "[Circular]",否则返回原始值。在最后输出 JSON 字符串的时候,我们可以看到,输出结果中会将循环引用的值替换为我们指定的字符串。

处理 Symbol 类型

在 ES6 中,JavaScript 新增了一个 Symbol 类型,它可以用来表示唯一的标识符。但是在 JSON 格式中,没有对应的类型,因此默认情况下,JSON.stringify() 方法会忽略 Symbol 类型的值。但是在 ES9 中,我们可以通过传入一个新的选项参数,即 replacer 函数,来处理 Symbol 类型的值。下面是一个例子:

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

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

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

在上面的例子中,我们定义了一个带有 Symbol 类型属性的对象 obj,然后传入了一个 replacer 函数,它会检查当前的值是否为 Symbol 类型,如果是,就将它转换为字符串形式,否则返回原始值。在最后输出 JSON 字符串的时候,我们可以看到,输出结果中会将 Symbol 类型的值转换为字符串形式。

处理 BigInt 类型

在 ES10 中,JavaScript 新增了一个 BigInt 类型,它可以用来表示任意精度的整数。但是在 JSON 格式中,没有对应的类型,因此默认情况下,JSON.stringify() 方法会忽略 BigInt 类型的值。但是在 ES9 中,我们可以通过传入一个新的选项参数,即 replacer 函数,来处理 BigInt 类型的值。下面是一个例子:

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

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

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

在上面的例子中,我们定义了一个带有 BigInt 类型属性的对象 obj,然后传入了一个 replacer 函数,它会检查当前的值是否为 BigInt 类型,如果是,就将它转换为字符串形式,否则返回原始值。在最后输出 JSON 字符串的时候,我们可以看到,输出结果中会将 BigInt 类型的值转换为字符串形式。

总结

JSON.stringify() 方法是一个非常实用的方法,可以帮助我们将 JavaScript 对象转换为 JSON 字符串。在 ES9 中,它得到了一些重要的改进,可以处理循环引用、Symbol 类型和 BigInt 类型等特殊情况。掌握这个方法的使用方法,可以让我们更方便地处理 JSON 格式的数据,提高开发效率。希望本文对读者有所帮助。

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

纠错
反馈