使用JSON.parse和JSON.stringify的Javascript深度复制

使用JSON.parse和JSON.stringify的Javascript深度复制,javascript,deep-copy,shallow-copy,Javascript,Deep Copy,Shallow Copy,下面的方法是否是在Javascript中深度复制对象的简单方法,即即使是嵌套非常深的对象/数组 let newObj = JSON.parse(JSON.stringify(obj)); 简而言之,这是一个简单但不可靠的深拷贝,适用于简单的JavaScript对象。但对于某些非原始数据类型的属性,它可能会失败 const set=new set(); 增加(1); 增加(2); 常量映射=新映射(); 地图集(‘杰西’,{电话号码:213-555-1234,地址:第一大街123号}) 常量对

下面的方法是否是在Javascript中深度复制对象的简单方法,即即使是嵌套非常深的对象/数组

let newObj = JSON.parse(JSON.stringify(obj));

简而言之,这是一个简单但不可靠的深拷贝,适用于简单的JavaScript对象。但对于某些非原始数据类型的属性,它可能会失败

const set=new set();
增加(1);
增加(2);
常量映射=新映射();
地图集(‘杰西’,{电话号码:213-555-1234,地址:第一大街123号})
常量对象={
foo:()=>“bar”,
日期:新日期(),
未定义,
设置
地图
}
控制台日志(obj);
让unreliablenewbj=JSON.parse(JSON.stringify(obj));
console.log(不可靠的bj);//有些属性丢失,有些属性更改,如集合和映射,可以比较结果
//ES6浅拷贝可能会有所帮助
设reliablenewbj={
…obj,
}
控制台日志(reliableewbj);
//从库中“真实”深度复制
// https://lodash.com/docs#cloneDeep
设deepObj=uu.cloneDeep(obj);//如果导入了uu

log(deepObj)
No。它不适用于圆形对象和所有包含非普通对象或数组的对象。它可能不适用于真正的大型对象,但有一个解决方案,如果存在圆形,该如何处理。这个问题被低估了,因为回答它毫无意义