今天把最近一直在開發(fā)的小程序放安卓手機(jī)上測(cè)試一下,結(jié)果某個(gè)頁面就一直報(bào)錯(cuò): Uncaught TypeError: Converting circular structure to JSON
先說一下基本的環(huán)境:
系統(tǒng):Android 6.0.1
手機(jī):小米4
微信版本:6.6.6
小程序基于mpvue開發(fā)
在看到這個(gè)錯(cuò)誤的時(shí)候,明白導(dǎo)致的原因應(yīng)該是因?yàn)橐粋€(gè)對(duì)象里面有循環(huán)引用,然后這個(gè)對(duì)象不幸的被JSON.stringify給調(diào)用了
可是這個(gè)有循環(huán)引用的對(duì)象在哪就不清楚了。
一開始想的是vue對(duì)象的data,因?yàn)樾〕绦蚶锩?,jscore會(huì)把這個(gè)data stringify之后發(fā)送給webview來渲染頁面。一直沿著這個(gè)思路在debug
而我出錯(cuò)的那個(gè)頁面的data很簡(jiǎn)單
{ list: [], currPage: 1, pageSize: 10, isEnd: false, isLoading: false }
唯一可能出問題的地方也就list了,可是試了很多方法,都證明了list不是有循環(huán)引用的點(diǎn)。
無奈只好google看看大家的解決方案,然后在mpvue的github的issues里面發(fā)現(xiàn)有一個(gè)類似的錯(cuò)誤的 issue
雖然引發(fā)錯(cuò)誤的原因不一樣,不過最后最底下 @anchengjian 的一個(gè)提示給了我另外一個(gè)方向,除了JSON.stringify之外,console也可能導(dǎo)致類似的錯(cuò)誤。
根據(jù)這個(gè)新的思路,從新讀了一遍代碼,發(fā)現(xiàn)了一句 console.log(this) ,當(dāng)初調(diào)試的時(shí)候,為了方便,把整個(gè)vue的實(shí)例給log了。注釋掉這一行,重新編譯,在安卓上預(yù)覽,果然,一切正常了。
這個(gè)console.log在開發(fā)者工具和ios上都沒問題,可到安卓上出了問題??赡苁前沧可?,微信的x5實(shí)現(xiàn)console.log的時(shí)候,先調(diào)用了JSON.stringify吧
這個(gè)問題不想深究了,不過被這種問題耽擱了半天又無益于技術(shù)進(jìn)步,想想還是記錄下來,方便后來者。
工作日 8:30-12:00 14:30-18:00
周六及部分節(jié)假日提供值班服務(wù)