js|JOSN.parse(JSON.stringify)缺点

808 阅读1分钟

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))); // 部分数据丢失或转义

image.png

2、如果对象的属性使用了new 一个构造函数,会丢失构造函数

image (1).png

3、深拷贝循环引用的对象,会引起报错

 var a = {};
 a.b = a;
 console.log(a); // 内存指向相互引用 无尽头 但不会内存溢出
 console.log(JOSN.parse(JSON.stringify(a))); // 直接报错 

image (2).png

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对象存在循环引入将无法实现深拷贝