Javascript 为什么console.log(窗口)可以工作,而JSON.stringify(窗口)不能';不行,我怎么才能克服呢?

Javascript 为什么console.log(窗口)可以工作,而JSON.stringify(窗口)不能';不行,我怎么才能克服呢?,javascript,json,console.log,Javascript,Json,Console.log,如果我在控制台中键入: console.log(window) 我使用展开按钮获取窗口中的所有对象 但如果我尝试同样的方法: JSON.stringify(window) 我进入Firefox: Error: Permission denied to access property 'toJSON' 镀铬: TypeError: Converting circular structure to JSON 这是唯一发生这种情况的情况吗?考虑到console.log()和JSON.str

如果我在控制台中键入:

 console.log(window)
我使用展开按钮获取
窗口中的所有对象

但如果我尝试同样的方法:

JSON.stringify(window) 
我进入Firefox:

Error: Permission denied to access property 'toJSON'
镀铬:

TypeError: Converting circular structure to JSON

这是唯一发生这种情况的情况吗?考虑到
console.log()
JSON.stringify()
的工作方式不同,我可以访问并仍然对
console.log()
管理显示的对象进行stringify吗?

这是因为
window
有循环引用(例如,在大多数情况下
window.self
window
)然后它就不能转换成JSON,否则它会变成一个无限循环

这可能发生在任何对象上,而不仅仅是在
窗口上:

var foo = {
    bar: 'bar'
};
JSON.stringify(foo);    // works fine

var foo = {
    bar: foo
};
JSON.stringify(foo);    // circular reference -> crashes

只有一部分可能的JavaScript对象可以序列化为JSON。DOM节点不是本机JavaScript对象。
var x={};x、 x=x;stringify(x)
@SLaks console.log(x)可以工作,但您可以在x中多次展开x,以尝试查看它是否结束。
var foo={bar:foo};JSON.stringify(foo)在Chrome中不会崩溃。这是因为Chrome添加了一项功能,以避免JSON对象在字符串化过程中出现循环引用。