今天把最近一直在開發的小程序放安卓手機上測試一下,結果某個頁面就一直報錯: Uncaught TypeError: Converting circular structure to JSON
先說一下基本的環境:
系統:Android 6.0.1
手機:小米4
微信版本:6.6.6
小程序基于mpvue開發
在看到這個錯誤的時候,明白導致的原因應該是因為一個對象里面有循環引用,然后這個對象不幸的被JSON.stringify給調用了
可是這個有循環引用的對象在哪就不清楚了。
一開始想的是vue對象的data,因為小程序里面,jscore會把這個data stringify之后發送給webview來渲染頁面。一直沿著這個思路在debug
而我出錯的那個頁面的data很簡單
{ list: [], currPage: 1, pageSize: 10, isEnd: false, isLoading: false }
唯一可能出問題的地方也就list了,可是試了很多方法,都證明了list不是有循環引用的點。
無奈只好google看看大家的解決方案,然后在mpvue的github的issues里面發現有一個類似的錯誤的 issue
雖然引發錯誤的原因不一樣,不過最后最底下 @anchengjian 的一個提示給了我另外一個方向,除了JSON.stringify之外,console也可能導致類似的錯誤。
根據這個新的思路,從新讀了一遍代碼,發現了一句 console.log(this) ,當初調試的時候,為了方便,把整個vue的實例給log了。注釋掉這一行,重新編譯,在安卓上預覽,果然,一切正常了。
這個console.log在開發者工具和ios上都沒問題,可到安卓上出了問題。可能是安卓上,微信的x5實現console.log的時候,先調用了JSON.stringify吧
這個問題不想深究了,不過被這種問題耽擱了半天又無益于技術進步,想想還是記錄下來,方便后來者。