JSON.stringify()二三事

不想看廢話的同學(xué)可以直接到分割線下面看關(guān)于JSON.stringify()的提醒

今天在處理數(shù)據(jù)的時(shí)候發(fā)生了一個(gè)靈異事件。

話不多說,上代碼:

如上圖所示,把存在localStorage里的數(shù)組取出來,再往里面push新的對(duì)象。其中選擇用Map儲(chǔ)存grades 的值,然后將數(shù)據(jù)往Map里面加。最后
localStorage.studentInfo = JSON.stringify(studentInfo); 把localStorage.studentInfo中存放的對(duì)象數(shù)組更新。
當(dāng)成功添加了一條學(xué)生信息后,在localStorage中的數(shù)據(jù)竟然是這樣的:

如大家所見,grades中的Map和其中的數(shù)據(jù)變成了一對(duì){}
原本想著是不是代碼有問題,然后在debug中watch grades值的變化:


執(zhí)行完代碼后,成績(jī)是被存進(jìn)了Map中的。
然后watch JSON.stirngify(studentInfo)

神奇的事情發(fā)生了,grades里面只剩下一對(duì){}。所以問題應(yīng)該是出在JSON.stringify的過程中了,然后去翻官方文檔:(參見https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

-------------------------------------------我是分割線--------------------------------------------------------------

功能大家都知道,將各種數(shù)據(jù)類型轉(zhuǎn)換成字符串。注意事項(xiàng)如下:


所以stringify并不能將所有的數(shù)據(jù)類型在不丟失信息的情況下轉(zhuǎn)換成字符串,上面的Map就在轉(zhuǎn)換的過程中變成了一對(duì){},解決方法就是用stringify可處理的數(shù)據(jù)結(jié)構(gòu)替換Map,然后我把grades用對(duì)象存就好了:


(PS:以上debug過程由陳老板完成,本人記錄。原本覺得是靈異事件的我通過觀察老板debug收獲還是挺多的,以后能夠抱著不拋棄不放棄的心態(tài)去debug解決各種靈異事件也是極好的。(心態(tài)已崩...))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容