在 window 中将循环结构转换为 JSON

Converting circular structure to JSON in window

我试图在控制台中显示 window 的所有元素。我试过 console.log(window) 但它没有自动扩展。 此线程 Is there a way to auto expand objects in Chrome Dev Tools? 建议我使用 JSON.stringify 但我收到以下错误:

这是一件不太可能做的事情,我认为您无法完全模仿您在控制台中看到的所有扩展内容 - 原因之一是 "circular structure" 的 window。不过,在某种程度上可以通过克隆 window 对象并进行一些调整来完成 - this 可能是一个很好的起点。

var maxDepth = 10;
function cloneObject(obj,depth) {
  if (!depth) depth = 1;
    var clone = {};
    for (var i in obj) {
        if (typeof(obj[i])=="object" && obj[i] != null) {
          try {
            if (obj[i].wowImCloned) clone[i] = '[I\'ve seen you somewhere..]';
            else if (depth >= maxDepth) clone[i]  = '[I\'m not going deeper]'
            else {
              obj[i].wowImCloned = true;
              clone[i] = cloneObject(obj[i],depth+1);
            }
          } catch(err) clone[i] = err.message;

        }
      else if (typeof(obj[i])=="function") clone[i]  = obj[i].toString()
      else clone[i] = obj[i];   
    }
    return clone;
}
var clone = cloneObject(window)
//console.log(JSON.stringify(clone))