不想看廢話的同學(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)已崩...))