妙用JSON.stringify,區分JSON.parse和JSON.stringify的區別,論辯toString與JSON.stringify的異同點
阿新 • • 發佈:2020-08-04
一.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型別
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.暫未發現,後續再續編輯