妙用JSON.stringify,区分JSON.parse和JSON.stringify的区别,论辩toString与JSON.stringify的异同点
一.JSON.stringify()和JSON.parse()的区别
最近在做项目,在需要用本地缓存对接口进行优化时,发现有频繁地用到JSON.stringify()的场景,于是启发了我的研究的兴趣
首先都知道,JSON.stringify()是将JavaScript对象转变成JSON字符串,JSON.parse()是将JSON字符串转变成一个对象,前者在数据进行本地缓存时用得最多,
在拿数据时调用后者即可(但是需要只有JSON字符串才能进行转换);
1 let a = [1, 2, 3] 2 console.log(JSON.stringify(a)); 3 console.log(a.toString()); 4 5 let b = JSON.stringify(a); //'[1,2,3]' 6 console.log(JSON.parse(b)); // [1,2,3] 7 8 let b2 = a.toString(); //'1,2,3' 9 console.log(JSON.parse(b2)); //underfined:toString()得到的字符串并非JSON字符串
二.JSON.stringify与toString()的区别
a.二者虽然都可以将数据转换成字符串,但二者所针对的受众目标并不相同,前者不仅仅限于数组,更多的是进行对象的转换;
后者只针对对数组的转换,并不能对对象如之类的进行转换得到你所想要的值,有着很大的局限性.
如:
1 let c = { 2 time: Date.now(), 3 data: { 4 id: 1, 5 name: 'mk', 6 age: 20 7 } 8 }; 9 console.log(JSON.stringify(c)); //{"time":1596464272481,"data":{"id":1,"name":"mk","age":20}} 10 console.log(c.toString()); //[object Object]
![](https://img2020.cnblogs.com/blog/1845323/202008/1845323-20200803223043471-1738798176.png)
b.JSON.stringify()将目标值转成JSON类型的字符串,toString()只是普通类型的字符串,如果在实际拿本地缓存中的数据时,如果调用JSON.parse()来转换对象时,
如果不是JSON类型的字符串的话会报错的。
三.JSON.stringify()的妙用
理解了以上要点,其妙用又有哪些呢?
a.利用localStorage/sessionStorage来本地存储数据,其实这个在上面时已经略有提过:
1 let a = { 2 time: Date.now(), 3 data: { 4 id: 1, 5 name: 'mk', 6 age: 19 7 } 8 }; 9 localStorage.setItem('mk', JSON.stringify(a)); 10 console.log(JSON.parse(localStorage.getItem('mk')));
b.实现对象的深拷贝(出于安全性考虑)
在实际项目开发时,常需要对源数据进行任意操作,如果怕会影响到源数据,深拷贝倒是一种不错的选择
1 let a = [1, 2, 3]; 2 let b = { 3 time: Date.now(), 4 data: { 5 id: 1, 6 name: 'mk', 7 age: 20 8 } 9 }; 10 let b = JSON.parse(JSON.stringify(b)); 11 console.log(d); //{ time: 1596465414379, data: { id: 1, name: 'mk', age: 20 } } 12 console.log(JSON.parse(JSON.stringify(a)));//[1 , 2 , 3 ]
c.暂未发现,后续再续编辑
身是红尘雨中客,
愿有执伞并肩人.