如果我输入控制台:
console.log(window)
我使用展开按钮获取window
中的所有对象。
但如果我尝试同样的:
JSON.stringify(window)
我进入Firefox:
Error: Permission denied to access property 'toJSON'
在chrome中:
TypeError: Converting circular structure to JSON
这是发生这种情况的唯一情况吗?鉴于console.log()
和JSON.stringify()
的工作方式不同,我是否可以访问console.log()
设法显示的对象并对其进行字符串化?
答案 0 :(得分:4)
那是因为window
有循环引用(例如,在大多数情况下window.self
引用window
)然后它无法转换为JSON,否则会转向进入无限循环。
这可能发生在任何对象上,而不仅仅发生在window
:
var foo = {
bar: 'bar'
};
JSON.stringify(foo); // works fine
var foo = {
bar: foo
};
JSON.stringify(foo); // circular reference -> crashes