随着前端技术的发展,JSON 格式的数据在前端开发中越来越常见。而在 ES10 中,JSON.stringify() 方法得到了一些改进,让我们在处理 JSON 数据时更加方便。
改进 1:支持 Symbol
在 ES10 中,JSON.stringify() 方法可以处理 Symbol 类型的数据了。在之前的版本中,如果我们在对象中使用了 Symbol 类型的属性,则无法通过 JSON.stringify() 方法将其转换为 JSON 格式的字符串。而现在,我们可以使用 replacer 函数来处理 Symbol 类型的属性。
-- -------------------- ---- ------- ----- --------- - -------------- ----- --- - - ------------ ------- -- ----- ---------- - ------------------- ----- ------ -- - -- ------- --- --- --------- - ------ ----------------------- ---- - ------ ------ --- ------------------------ -- ---------------
在上面的代码中,我们使用了一个 Symbol 类型的属性来定义一个对象,并使用 replacer 函数将其转换为了 JSON 格式的字符串。
改进 2:支持 BigInt
在 ES10 中,JSON.stringify() 方法也可以处理 BigInt 类型的数据了。在之前的版本中,如果我们在对象中使用了 BigInt 类型的属性,则无法通过 JSON.stringify() 方法将其转换为 JSON 格式的字符串。而现在,我们可以使用 replacer 函数来处理 BigInt 类型的属性。
const obj = { num: 9007199254740991n }; const jsonString = JSON.stringify(obj, (key, value) => { if (typeof value === 'bigint') { return value.toString(); } return value; }); console.log(jsonString); // {"num":"9007199254740991"}
在上面的代码中,我们使用了一个 BigInt 类型的属性来定义一个对象,并使用 replacer 函数将其转换为了 JSON 格式的字符串。
改进 3:支持空格
在 ES10 中,JSON.stringify() 方法可以接受第三个参数,用来设置输出格式。我们可以使用这个参数来设置输出字符串时是否添加空格,以及添加几个空格。
-- -------------------- ---- ------- ----- --- - - ----- ------- ---- -- -- ----- ---------- - ------------------- ----- --- ------------------------ -- - ------- ------- ------ -- - --
在上面的代码中,我们使用了第三个参数来设置输出字符串时添加两个空格。
改进 4:支持 toJSON() 方法
在 ES10 中,如果一个对象有 toJSON() 方法,则在使用 JSON.stringify() 方法时会调用这个方法来获取要序列化的值。这个方法可以返回一个新的对象,用来替代原对象。
-- -------------------- ---- ------- ----- --- - - ----- ------- ---- --- -------- - ------ - ----- ------------------------ ---- --------- -- -- -- ----- ---------- - -------------------- ------------------------ -- ------------------------
在上面的代码中,我们使用了一个对象,并在其上定义了一个 toJSON() 方法。在使用 JSON.stringify() 方法时,会调用这个方法来获取要序列化的值。
总结
ES10 中的 JSON.stringify() 方法的改进让我们在处理 JSON 数据时更加方便,特别是在处理 Symbol 和 BigInt 类型的数据时更是如此。我们可以使用 replacer 函数来处理这些类型的属性,也可以使用第三个参数来设置输出字符串的格式。而如果一个对象有 toJSON() 方法,则在使用 JSON.stringify() 方法时会调用这个方法来获取要序列化的值。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6640b965d3423812e4ecdd07