1、会造成不同程度的数据丢失
var obj = {
name: 'zhangsan',
date: new Date(),
regExp: new RegExp("\w+"),
fun: function () { return true;},
err: new Error('error'),
symbol: Symbol(233),
undefined: undefined,
null: null,
nan: NaN,
infinity: Infinity // 无穷大
};
console.log(obj); // 正常
console.log(JOSN.parse(JSON.stringify(obj))); // 部分数据丢失或转义
2、如果对象的属性使用了new 一个构造函数,会丢失构造函数
3、深拷贝循环引用的对象,会引起报错
var a = {};
a.b = a;
console.log(a); // 内存指向相互引用 无尽头 但不会内存溢出
console.log(JOSN.parse(JSON.stringify(a))); // 直接报错
4、JSON.parse(JSON.stringify)
JSON.parse(JSON.stringify)为什么可以实现深拷贝?
使用JSON.stringify将对象序列化,转成字符串后,存储在硬盘上,在通过JSON.parse()反序列化,将字符串转成对象
实现深拷贝的缺点?
会将JS对象中的时间对象转化为字符串
会将JS对象中的RegExp、Error对象转化为空对象
会将JS对象中的function、undefined、Symbol丢失
会将JS对象中的NaN、Infinity和-Infinity转化为null
会将JS对象中有构造函数生成的对象的 constructor 丢失
如果JS对象存在循环引入将无法实现深拷贝