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

J*aScript 的 JSON.stringify 和 JSON.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 对以下值的处理方式会导致信息丢失:
- undefined、function、symbol 会被忽略(在对象中)或转为 null(在数组中)
- NaN 和 Infinity 被转换为 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
一款集成AI换脸、照片跳舞等多种AI特效玩法的App
124
查看详情
例如:
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. Ma
p、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支持全新明眸护眼:通过了最严苛的护眼小金标认证


2025-10-13
浏览次数:次
返回列表
p、Set、TypedArray 等特殊对象无法正确序列化