在前端开发中,我们经常需要使用 JavaScript 对象表示数据,而在数据传输和存储时,我们通常使用 JSON(JavaScript Object Notation)格式。ES11(ECMAScript 2020)引入了一些新的特性来优化 JSON 对象的处理,使序列化和反序列化更加方便和高效。
JSON.stringify() 增强
JSON.stringify() 方法可以将 JavaScript 对象转换为 JSON 字符串,以便于传输和存储。ES11 对该方法进行了增强,使其支持更多的选项和更好的性能。
BigInt 支持
在 ES11 之前,如果 JavaScript 对象中包含 BigInt 类型的数据,那么在使用 JSON.stringify() 方法时会抛出错误。ES11 引入了对 BigInt 类型的支持,可以将 BigInt 类型的数据转换为字符串表示。
const obj = { num: BigInt(9007199254740991) }; const json = JSON.stringify(obj); console.log(json); // {"num":"9007199254740991"}
Map 和 Set 支持
在 ES11 之前,如果 JavaScript 对象中包含 Map 或 Set 类型的数据,那么在使用 JSON.stringify() 方法时会将其转换为空对象。ES11 引入了对 Map 和 Set 类型的支持,可以将其转换为数组表示。
-- -------------------- ---- ------- ----- --- - --- ----- -------- ------- ------- --- --- ----- ---- - -------------------- ------------------ -- --------------------------- ----- --- - --- ------------- --------- ----------- ----- ---- - -------------------- ------------------ -- ---------------------------展开代码
toJSON() 方法支持
如果 JavaScript 对象中包含 toJSON() 方法,那么在使用 JSON.stringify() 方法时会调用该方法,并将其返回值作为 JSON 字符串的表示。这样我们就可以自定义 JavaScript 对象转换为 JSON 字符串的方式。
-- -------------------- ---- ------- ----- --- - - ----- ------ ---- --- -------- - ------ - ----- ------------------------ ---- -------- -- - -- ----- ---- - -------------------- ------------------ -- -----------------------展开代码
JSON.parse() 增强
JSON.parse() 方法可以将 JSON 字符串转换为 JavaScript 对象。ES11 对该方法进行了增强,使其支持更多的选项和更好的性能。
reviver 函数支持
在 ES11 之前,JSON.parse() 方法只能将 JSON 字符串转换为普通的 JavaScript 对象。ES11 引入了 reviver 函数,可以自定义如何将 JSON 字符串转换为 JavaScript 对象。reviver 函数会在每个属性被解析时被调用,并且可以返回一个新的值来替换原始值。
const json = '{"name":"Tom","age":18}'; const obj = JSON.parse(json, (key, value) => { if (key === "age") { return value + 1; } return value; }); console.log(obj); // {name: "Tom", age: 19}
BigInt 支持
在 ES11 之前,如果 JSON 字符串中包含 BigInt 类型的数据,那么在使用 JSON.parse() 方法时会抛出错误。ES11 引入了对 BigInt 类型的支持,可以将字符串表示的 BigInt 类型的数据转换为 BigInt 类型。
-- -------------------- ---- ------- ----- ---- - ----------------------------- ----- --- - ----------------- --------------------- -- ------------------ ------------------ --------- -- -------- ----- ---- - ---------------- ----- ------ -- - -- ------- ----- --- -------- -- -------------------- - ------ -------------- - ------ ------ --- ---------------------- -- ----------------- ------------------ ---------- -- --------展开代码
总结
ES11 引入了一些新的特性来优化 JSON 对象的处理,使序列化和反序列化更加方便和高效。我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为 JSON 字符串,并使用 JSON.parse() 方法将 JSON 字符串转换为 JavaScript 对象。在使用过程中,我们可以根据需要使用增强版的 JSON.stringify() 和 JSON.parse() 方法来更好地支持对象序列化和反序列化。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650f9f6f95b1f8cacd85045d