项目中看到的前辈写的,之前没有了解过,刚了解了下。
JSON.stringify()和JSON.parse()
什么时候用到这个呢,就是获取接口的数据后,对数据进行操作会改变源数据的问题,这里面就涉及到了数据的深拷贝问题。JSON.stringify()和JSON.parse(),简单来说JSON.stringify()就是将对象转换为字符串,JSON.parse()将字符串还原为对象,以此实现对象的深拷贝,防止源数据的改变。
为什么这样传也是有原因的,首先就是参数较多,最好的方式就是通过对象进行传递,其次是因为如果传递了对象但是没有进行深拷贝的话,刷新子页面就无法再加载到数据,因为参数丢失了,虽然在url上有显示,但是实际dom节点已经获取不到了。
但是这种实现深拷贝的方法有局限性,它只适用于一般数据的拷贝(对象、数组)
1.如果json里面有时间对象,则序列化结果:时间对象=>字符串的形式;
2.如果json里有RegExp、Error对象,则序列化的结果将只得到空对象 RegExp、Error => {};
3.如果json里有 function,undefined,则序列化的结果会把 function,undefined 丢失;
4.如果json里有NaN、Infinity和-Infinity,则序列化的结果会变成null;
5.如果json里有对象是由构造函数生成的,则序列化的结果会丢弃对象的 constructor;
6.如果对象中存在循环引用的情况也无法实现深拷贝