1. 程式人生 > 實用技巧 >妙用JSON.stringify,區分JSON.parse和JSON.stringify的區別,論辯toString與JSON.stringify的異同點

妙用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.暫未發現,後續再續編輯