JSON.stringify 深拷贝的弊端以及常用场景
前言#
深拷贝不仅将原对象的各个属性逐个复制出去,而且将原对象各个属性所包含的对象也依次采用深拷贝的方法递归复制到新对象上
弊端#
- 如果 obj 的属性有时间对象,则 JSON.stringify 后再 JSON.parse 的结果,时间将转为字符串的形式,而不是对象的形式
- 如果 obj 的属性有 RegExp (正则表达式的缩写)、Error 对象,则序列化的结果将只得到空对象;
- 如果 obj 的属性有函数(function),undefined,Symbol, 则序列化的结果会把 function 或 undefined 丢失;
- 如果obj 的属性有 NaN、Infinity 和 -Infinity,则序列化的结果会变成 null
- JSON.stringify() 只能序列化对象的可枚举的自有属性,例如如果 obj 中的对象是有构造函数生成的, 则使用 JSON.parse(JSON.stringify(obj)) 深拷贝后,会丢弃对象的 constructor;
- 如果对象中存在循环引用的情况也无法正确实现深拷贝,并且会导致死循环,最后抛出异常
其他常用场景#
- 判断数组是否包含某对象: 将数组和要比对的对象转换成字符串后,比对字符串包含关系。(对象顺序很关键)
- 判断对象是否相等(对象顺序很关键)
- 让 localStorage / sessionStorage 可以存储对象
作者:水车
出处:https://www.cnblogs.com/shuiche/p/16012080.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
推荐一个激活软件下载站:mac.shuiche.cc
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
2021-03-16 mac下创建英文路径的中文文件夹(类似系统自带的 图片/桌面/文稿/下载这些显示)