新闻中心

J*aScript 的 JSON.stringify 和 JSON.parse 方法在序列化复杂对象时有何限制?

2025-10-13
浏览次数:
返回列表
JSON.stringify与parse在处理复杂对象时存在四大限制:1. 循环引用会抛错,需用flatted或replacer函数解决;2. undefined、function、symbol被忽略,NaN、Infinity转为null,RegExp变空对象,Date转字符串但不还原;3. 原型链和方法丢失,反序列化后无法调用原对象方法;4. Map、Set、TypedArray等特殊对象无法正确序列化,数据或类型丢失。建议使用structuredClone或专用库进行完整对象复制。

javascript 的 json.stringify 和 json.parse 方法在序列化复杂对象时有何限制?

J*aScript 的 JSON.stringifyJSON.parse 方法虽然常用于对象序列化和反序列化,但在处理复杂对象时存在多个限制。这些限制可能导致数据丢失、类型错误或无法正确还原原始对象状态。

1. 无法处理循环引用

当对象中存在循环引用(即某个属性直接或间接引用自身)时,JSON.stringify 会抛出错误。

例如:
const obj = { name: "test" };
obj.self = obj;
JSON.stringify(obj); // 抛出 TypeError: Converting circular structure to JSON

解决方法是使用第三方库(如 flatted)或传入自定义的 replacer 函数来过滤掉循环引用。

2. 特殊值会被忽略或转换

JSON.stringify 对以下值的处理方式会导致信息丢失:

  • undefinedfunctionsymbol 会被忽略(在对象中)或转为 null(在数组中)
  • NaNInfinity 被转换为 null
  • RegExp 对象变成空对象 {}
  • Date 对象被转换为字符串(ISO 格式),但 JSON.parse 不会自动还原为 Date 实例
示例:
const data = {
  a: undefined,
  b: function() {},
  c: /abc/,
  d: new Date(),
  e: NaN
};
JSON.stringify(data);
// 输出:{"c":{},"d":"2025-01-01T00:00:00.000Z","e":null}
// 原始类型信息已丢失

3. 无法保留对象的原型链和构造函数信息

JSON.stringify 只序列化对象的可枚举自有属性,不包含原型上的属性。反序列化后得到的是一个纯普通对象,失去原有类结构。

秀脸FacePlay 秀脸FacePlay

一款集成AI换脸、照片跳舞等多种AI特效玩法的App

秀脸FacePlay 124 查看详情 秀脸FacePlay 例如:
class Person {
  constructor(name) {
    this.name = name;
  }
  greet() {
    return "Hello, " + this.name;
  }
}
const p = new Person("Alice");
const str = JSON.stringify(p);
const restored = JSON.parse(str);
restored.greet(); // 报错:greet is not a function

方法和原型链在序列化过程中完全丢失。

4. Map、Set、TypedArray 等特殊对象无法正确序列化

这些内置对象在经过 JSON.stringify 后会变成空对象或数组以外的结构,导致数据丢失。

示例:
const map = new Map([["key", "value"]]);
JSON.stringify(map); // "{}"

const set = new Set([1, 2, 3]);
JSON.stringify(set); // "{}"

const arr = new Uint8Array([1, 2, 3]);
JSON.stringify(arr); // "[1,2,3]" —— 变成普通数组,类型丢失

虽然 TypedArray 能保留数值,但其类型和功能特性无法恢复。

基本上就这些常见限制。如果需要完整序列化复杂对象,建议使用专门的库如 structuredClone(现代浏览器支持)、lodash 的深拷贝,或自定义序列化逻辑。JSON 方法适合简单数据交换,不适合保存对象完整行为和结构。不复杂但容易忽略。

以上就是J*aScript 的 JSON.stringify 和 JSON.parse 方法在序列化复杂对象时有何限制?的详细内容,更多请关注其它相关文章!


# 抛出  # 阳朔网站的建设  # 拼多多淘宝网站建设  # 大型的网站推广收费  # Seo和sem对kol  # 51优化志愿网站如何查找大学  # 如何营销推广农产品  # seo试用期计划  # 音乐网站建设报告  # 湛江网站推广高手  # 锦州关键词排名公司推荐  # 如何实现  # 如何用  # javascript  # 如何使用  # 转换为  # 可以使用  # 自定义  # 序列化  # red  # 数据丢失  # 解决方法  # 浏览器  # json  # js  # java 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: J*aScript中localStorage数据的获取、清洗与格式化教程  J*aScript数组对象转换:按指定键分组与值收集  CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠  age动漫网站入口 age动漫官网直接访问入口  美团外卖商家服务中心入口 美团商家版官网入口  c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析  Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性  Lar*el Excel导入时生成自定义递增ID的策略与实践  铃兰之剑为这和平的世界希里技能组及加点推荐  黑猫投诉统一入口官网 消费者权益保护投诉平台  yy漫画网页版官方入口_yy漫画官网登录页面链接  怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】  Typer应用中动态命令行参数的解析与处理  解决 Express.js 中 PUT 请求密码修改失败的路由配置指南  如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践  C++如何生成随机数_C++ random库使用方法与范围设置  Win11怎么设置鼠标指针速度_Win11提高鼠标指针精确度选项  双系统安装时,如何设置默认启动系统? msconfig命令了解一下!  Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】  《明末:渊虚之羽》设计师谈设计角色:那会刚毕业 充满激情  必由学官网首页入口 必由学教师网页版登录指南  高德地图家和公司地址在哪设置 高德地图通勤路线设置方法【超详细】  J*aScript教程:根据元素文本内容动态设置背景色  Go RPC HTTP服务正确实现与常见陷阱解析  uc浏览器网页版入口 uc浏览器网页版最新网址  vivo云服务网页版登录 怎么登录vivo云服务网页版  Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口  MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具  Win10快速启动功能利弊分析 Win10开启或关闭快速启动教程【技巧】  铁路12306的积分有效期是多久_铁路12306积分有效期说明  晋江读书网页版在线登录 晋江读书电脑版官网  夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案  解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException  高德地图怎么看全景照片_高德地图全景照片浏览教程  Golang如何实现Web文件静态资源服务器_Golang静态资源服务器开发与实践  写好的html代码怎么运行出来_运行写好的html代码方法【教程】  PrimeNG Sidebar背景色自定义指南:CSS覆盖与主题化实践  Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求  html5 app怎么运行环境_配html5 app运行环境【教程】  打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门  win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】  mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析  sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统  Log4j Console Appender性能瓶颈与高并发优化策略  网易大神账号申诉需要多久_网易大神账号申诉流程说明  俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口  Spring Boot内嵌服务器与J*a EE全栈特性:选择与部署策略  服务端验证_j*ascript输入检查  抖音网页版快捷访问 抖音网页版网页版入口操作教程  一加Ace 6T支持全新明眸护眼:通过了最严苛的护眼小金标认证 

搜索