详解如何解决使用JSON.stringify时遇到的循环引用问题

 更新时间:2021年03月21日 10:03:46   作者:汪子熙  
这篇文章主要介绍了详解如何解决使用JSON.stringify时遇到的循环引用问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

程序员在日常做TypeScript/JavaScript开发时,经常需要将复杂的JavaScript对象通过JSON.stringify序列化成json字符串,保存到本地以便后续具体分析。

然而如果JavaScript对象本身包含循环引用,则JSON.stringify不能正常工作,错误消息:

VM415:1 Uncaught TypeError: Converting circular structure to JSON

解决方案,使用下面这段来自这个网站的代码,定义一个全局cache数组,每当待序列化的JavaScript对象的属性被遍历时,将该属性对应的值存储到cache数组去。

如果遍历时发现,有属性值已经在cache数组里有值了,说明检测到了循环引用,此时直接return退出循环即可。

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; // 清空变量,便于垃圾回收机制回收

使用这种办法,我成功将一个存在循环引用的JavaScript对象序列化成字符串了。

到此这篇关于详解如何解决使用JSON.stringify时遇到的循环引用问题的文章就介绍到这了,更多相关JSON.stringify 循环引用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码

    分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码

    这是本人2007年进行的一项研究,当时网络上没有什么既精简又实用的循环滚动代码,所以就自己琢磨了段时间,最终找到这个办法
    2011-09-09
  • javascript 显示全局变量与隐式全局变量的区别

    javascript 显示全局变量与隐式全局变量的区别

    这篇文章主要介绍了javascript 显示全局变量与隐式全局变量的区别,需要的朋友可以参考下
    2017-02-02
  • js实现图片旋转 js滚动鼠标中间对图片放大缩小

    js实现图片旋转 js滚动鼠标中间对图片放大缩小

    这篇文章主要为大家详细介绍了js实现图片旋转,滚动鼠标中间对图片放大缩小等效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Bootstrap下拉菜单样式

    Bootstrap下拉菜单样式

    这篇文章主要为大家详细介绍了Bootstrap下拉菜单样式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • javascript实现图片轮播代码

    javascript实现图片轮播代码

    这篇文章主要为大家详细介绍了javascript实现图片轮播代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • JavaScript数组去重算法实例小结

    JavaScript数组去重算法实例小结

    这篇文章主要介绍了JavaScript数组去重算法,结合实例形式总结分析了JavaScript数组去重相关的读写、遍历、比较、排序等操作及算法改进相关实现技巧,需要的朋友可以参考下
    2018-05-05
  • JavaScript隐式类型转换

    JavaScript隐式类型转换

    JavaScript的数据类型是非常弱的(不然不会叫它做弱类型语言了)!在使用算术运算符时,运算符两边的数据类型可以是任意的,比如,一个字符串可以和数字相加
    2016-03-03
  • JS实现清除指定cookies的方法

    JS实现清除指定cookies的方法

    这篇文章主要介绍了JS实现清除指定cookies的方法,在web程序设计中非常实用,需要的朋友可以参考下
    2014-09-09
  • 关于JavaScript中var声明变量作用域的推断

    关于JavaScript中var声明变量作用域的推断

    这个问题其实之前困扰了我很久。如今终于想明白了,特来分享,如果有错误的地方,请帮忙指正,我会随时回来修正滴。
    2010-12-12
  • JavaScript实现跟随广告的示例代码

    JavaScript实现跟随广告的示例代码

    浮动广告是目前网站很常见的一种广告形式,浮动广告能实时跟随用户的浏览,有效的传达产品要表达的意思,达到很好的传播效果。本文使用JavaScript实现跟随广告的示例代码,感兴趣的可以了解一下
    2021-11-11

最新评论