不想看廢話的同學(xué)可以直接到分割線下面看關(guān)于JSON.stringify()的提醒
今天在處理數(shù)據(jù)的時候發(fā)生了一個靈異事件速那。
話不多說俐银,上代碼:
如上圖所示,把存在localStorage里的數(shù)組取出來端仰,再往里面push新的對象捶惜。其中選擇用Map儲存grades 的值,然后將數(shù)據(jù)往Map里面加荔烧。最后
localStorage.studentInfo = JSON.stringify(studentInfo); 把localStorage.studentInfo中存放的對象數(shù)組更新吱七。
當(dāng)成功添加了一條學(xué)生信息后,在localStorage中的數(shù)據(jù)竟然是這樣的:
如大家所見鹤竭,grades中的Map和其中的數(shù)據(jù)變成了一對{}
原本想著是不是代碼有問題踊餐,然后在debug中watch grades值的變化:
執(zhí)行完代碼后,成績是被存進了Map中的臀稚。
然后watch JSON.stirngify(studentInfo)
神奇的事情發(fā)生了吝岭,grades里面只剩下一對{}。所以問題應(yīng)該是出在JSON.stringify的過程中了吧寺,然后去翻官方文檔:(參見https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)
-------------------------------------------我是分割線--------------------------------------------------------------
功能大家都知道窜管,將各種數(shù)據(jù)類型轉(zhuǎn)換成字符串。注意事項如下:
所以stringify并不能將所有的數(shù)據(jù)類型在不丟失信息的情況下轉(zhuǎn)換成字符串撮执,上面的Map就在轉(zhuǎn)換的過程中變成了一對{}微峰,解決方法就是用stringify可處理的數(shù)據(jù)結(jié)構(gòu)替換Map,然后我把grades用對象存就好了:
(PS:以上debug過程由陳老板完成抒钱,本人記錄蜓肆。原本覺得是靈異事件的我通過觀察老板debug收獲還是挺多的,以后能夠抱著不拋棄不放棄的心態(tài)去debug解決各種靈異事件也是極好的谋币。(心態(tài)已崩...))