JSON.stringify 深拷贝的弊端以及常用场景

前言#

深拷贝不仅将原对象的各个属性逐个复制出去,而且将原对象各个属性所包含的对象也依次采用深拷贝的方法递归复制到新对象上

弊端#

  1. 如果 obj 的属性有时间对象,则 JSON.stringify 后再 JSON.parse 的结果,时间将转为字符串的形式,而不是对象的形式
  2. 如果 obj 的属性有 RegExp (正则表达式的缩写)、Error 对象,则序列化的结果将只得到空对象;
  3. 如果 obj 的属性有函数(function),undefined,Symbol, 则序列化的结果会把 function 或 undefined 丢失;
  4. 如果obj 的属性有 NaN、Infinity 和 -Infinity,则序列化的结果会变成 null
  5. JSON.stringify() 只能序列化对象的可枚举的自有属性,例如如果 obj 中的对象是有构造函数生成的, 则使用 JSON.parse(JSON.stringify(obj)) 深拷贝后,会丢弃对象的 constructor;
  6. 如果对象中存在循环引用的情况也无法正确实现深拷贝,并且会导致死循环,最后抛出异常

其他常用场景#

  1. 判断数组是否包含某对象: 将数组和要比对的对象转换成字符串后,比对字符串包含关系。(对象顺序很关键)
  2. 判断对象是否相等(对象顺序很关键)
  3. 让 localStorage / sessionStorage 可以存储对象
posted @   水车  阅读(309)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
历史上的今天:
2021-03-16 mac下创建英文路径的中文文件夹(类似系统自带的 图片/桌面/文稿/下载这些显示)
主题色彩
点击右上角即可分享
微信分享提示