詳解如何解決使用JSON.stringify時(shí)遇到的循環(huán)引用問(wèn)題
程序員在日常做TypeScript/JavaScript開(kāi)發(fā)時(shí),經(jīng)常需要將復(fù)雜的JavaScript對(duì)象通過(guò)JSON.stringify序列化成json字符串,保存到本地以便后續(xù)具體分析。
然而如果JavaScript對(duì)象本身包含循環(huán)引用,則JSON.stringify不能正常工作,錯(cuò)誤消息:
VM415:1 Uncaught TypeError: Converting circular structure to JSON
解決方案,使用下面這段來(lái)自這個(gè)網(wǎng)站的代碼,定義一個(gè)全局cache數(shù)組,每當(dāng)待序列化的JavaScript對(duì)象的屬性被遍歷時(shí),將該屬性對(duì)應(yīng)的值存儲(chǔ)到cache數(shù)組去。
如果遍歷時(shí)發(fā)現(xiàn),有屬性值已經(jīng)在cache數(shù)組里有值了,說(shuō)明檢測(cè)到了循環(huán)引用,此時(shí)直接return退出循環(huán)即可。
var cache = []; var str = JSON.stringify(o, function(key, value) { if (typeof value === 'object' && value !== null) { if (cache.indexOf(value) !== -1) { // 移除 return; } // 收集所有的值 cache.push(value); } return value; }); cache = null; // 清空變量,便于垃圾回收機(jī)制回收
使用這種辦法,我成功將一個(gè)存在循環(huán)引用的JavaScript對(duì)象序列化成字符串了。
到此這篇關(guān)于詳解如何解決使用JSON.stringify時(shí)遇到的循環(huán)引用問(wèn)題的文章就介紹到這了,更多相關(guān)JSON.stringify 循環(huán)引用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js對(duì)象實(shí)例詳解(JavaScript對(duì)象深度剖析,深度理解js對(duì)象)
下面小編就為大家?guī)?lái)一篇js對(duì)象實(shí)例詳解(JavaScript對(duì)象深度剖析,深度理解js對(duì)象)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09JS加密插件CryptoJS實(shí)現(xiàn)AES加密操作示例
這篇文章主要介紹了JS加密插件CryptoJS實(shí)現(xiàn)AES加密操作,結(jié)合實(shí)例形式分析了CryptoJS插件的具體設(shè)置與AES加密操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-08-08詳解小程序云開(kāi)發(fā)攻略(解決最棘手的問(wèn)題)
這篇文章主要介紹了詳解小程序云開(kāi)發(fā)攻略(解決最棘手的問(wèn)題),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09權(quán)威JavaScript 中的內(nèi)存泄露模式
權(quán)威JavaScript 中的內(nèi)存泄露模式...2007-08-08基于Particles.js制作超炫粒子動(dòng)態(tài)背景效果(仿知乎)
本文給大家分享Particles.js基于Canvas畫(huà)布創(chuàng)建粒子顆粒效果,代碼非常簡(jiǎn)單,需要的朋友參考下吧2017-09-09JS中循環(huán)遍歷數(shù)組的四種方式總結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于JS中循環(huán)遍歷數(shù)組的四種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Bootstrap滾動(dòng)監(jiān)聽(tīng)(Scrollspy)插件詳解
滾動(dòng)監(jiān)聽(tīng)插件是用來(lái)根據(jù)滾動(dòng)條所處在的位置自動(dòng)更新導(dǎo)航項(xiàng)目, 顯示導(dǎo)航項(xiàng)目高亮顯示。這篇文章主要介紹了Bootstrap滾動(dòng)監(jiān)聽(tīng)(Scrollspy)插件的相關(guān)資料,需要的朋友可以參考下2016-04-04自己實(shí)現(xiàn)string的substring方法 人民幣小寫(xiě)轉(zhuǎn)大寫(xiě),數(shù)字反轉(zhuǎn),正則優(yōu)化
這是最近碰到的幾個(gè)題目,簡(jiǎn)單地寫(xiě)一下我自己的方案,在此分享給大家,也希望能看到大家的方案2012-09-09