检测并修复 JavaScript 中的循环引用

2023-12-11

鉴于我在一个大型 JavaScript 对象中有一个循环引用

我尝试JSON.stringify(problematicObject)

浏览器抛出

“类型错误:将循环结构转换为 JSON”

(这是预期的)

那我想找到这个循环引用的原因,最好使用Chrome开发者工具?这可能吗?如何查找并修复大对象中的循环引用?


拉自http://blog.vjeux.com/2011/javascript/cycl-object-detection.html。添加一行来检测循环的位置。将其粘贴到 Chrome 开发工具中:

function isCyclic (obj) {
  var seenObjects = [];

  function detect (obj) {
    if (obj && typeof obj === 'object') {
      if (seenObjects.indexOf(obj) !== -1) {
        return true;
      }
      seenObjects.push(obj);
      for (var key in obj) {
        if (obj.hasOwnProperty(key) && detect(obj[key])) {
          console.log(obj, 'cycle at ' + key);
          return true;
        }
      }
    }
    return false;
  }

  return detect(obj);
}

这是测试:

> a = {}
> b = {}
> a.b = b; b.a = a;
> isCyclic(a)
  Object {a: Object}
   "cycle at a"
  Object {b: Object}
   "cycle at b"
  true
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测并修复 JavaScript 中的循环引用 的相关文章