首页 > 其他分享 >使用JSON实现数据深拷贝时需要注意的坑

使用JSON实现数据深拷贝时需要注意的坑

时间:2022-11-26 23:55:08浏览次数:52  
标签:stringify parse JSON 注意 var 拷贝 null

JSON实现深拷贝非常便利,但如果你不熟悉JSON或者对将要被深拷贝的对象不清楚,那么的话,还是要谨慎些。

// JSON深拷贝
JSON.parse(JSON.stringify(obj));

 

存在以下几种情况,被拷贝对象会出现异常:

1. 如果存在循环引用,使用JSON进行拷贝时会直接报错;

// Error
var o = {
  x: null,
};
o.x = o;

2. Map, Set, WeakMap, WeakSet数据会被转为普通的Object;

var o = {
  m: new Map(),
  n: new Set(),
  wm: new WeakMap(),
  wn: new WeakSet(),
};

JSON.parse(JSON.stringify(o));

// output:
//{
//    m: {},
//    n: {},
//    wm: {},
//    wn: {},
//}

3. Date对象会被转为String对象;

var s = {
  d: new Date(),
};

var cp = JSON.parse(JSON.stringify(s));
// output: {d: Sat Nov 26 2022 23:33:13 GMT+0800 (中国标准时间)}

4. NaN, Infinity, -Infinity 会被转为null

var o = {
  n: NaN,
  i: Infinity,
  di: -Infinity,
};

JSON.parse(JSON.stringify(o));

// output:
//{
//   di: null,
//   i: null,
//   n: null,
//}

5. 当属性值为Function, Undefined, Symbol时,会被直接抹掉

var o = {
  und: undefined,
  fn: () => {},
  sy: Symbol('sy'),
};

JSON.parse(JSON.stringify(o));

// output:
// {}

 

标签:stringify,parse,JSON,注意,var,拷贝,null
From: https://www.cnblogs.com/fanqshun/p/16928676.html

相关文章

  • Bootstrap_栅格系统_注意事项与Bootstrap_全局CSS样式_按钮&图片
    Bootstrap_栅格系统_注意事项栅格系统_注意事项:1.一行中如果格子数目超过12,则超出部分自动换行......
  • TypeScript学习笔记-04 tsconfig.json配置文件
    tsconfig.json一般常用的配置如下所示,可以按需要进行配置。{/*tsconfig.json是ts编译器的配置文件,ts编译器可以根据他的信息来对代码进行编译//in......
  • Newtonsoft.Json null值不序列化
    varjSetting=newJsonSerializerSettings{NullValueHandling=NullValueHandling.Ignore};varjson=JsonConvert.SerializeObject(response,Formatting.Indented,j......
  • servlet中处理json
    使用fastJson<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.28</version></dependency>1.getjson数据@Overr......
  • 微服务、gGRPC、protobuf、rest和json
    微服务、gGRPC、protobuf、rest和json到目前为止,基于REST的API已经成为大多数服务间通信的首选架构。虽然基于REST/JSON的通信有几个好处,并且得到跨语言和提供......
  • Bootstrap栅格系统_入门以及注意事项
    Bootstrap栅格系统_入门响应式布局:同一套页面可以兼容不同分辨率的设备实现:依赖于栅格系统:将一行平均分成12个格子,可以指定元素占几个格子步骤:1.......
  • 【个人笔记】Nestjs使用TypeORM注意点
    在Nestjs使用TypeORM还是有一些注意点。entities路径配置注意点在nestjs中使用TypeORM,需要配置数据库连接(以MySQL为例)。需要特别注意的是配置参数里面的entities字段:{......
  • Java lambda表达式的使用注意点
    0捕获自由变量为了使lambda表达式看起来更像是函数式编程,可以在函数内部直接访问外部变量。lambda表达式具有一个特殊的能力,它可以捕获自由变量。自由变量指的是lambda......
  • 浅拷贝与深拷贝
    一、数据类型存储在JavaScript中存在两大数据类型:基本类型、引用类型。基本数据类型存放在栈中,是一段简单的数据段,数据大小确定,内存空间大小可以分配,是直接按值存放......
  • 数据库存json数据类型,参数JSONObject/JSONArray类型返回的结果映射为null
    【问题】数据库存json数据类型,参数JSONObject/JSONArray类型返回的结果映射为null【原因】实体类上少加了 autoResultMap=true参数,导致返回json数据为null  ......