妙用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]
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.暂未发现,后续再续编辑

 
posted @ 2020-08-03 22:42  良夜  阅读(1954)  评论(0编辑  收藏  举报