为什么console.log(窗口)工作但JSON.stringify(窗口)不起作用,我怎么能打败它?

时间:2014-02-04 15:13:42

标签: javascript json console.log

如果我输入控制台:

 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()设法显示的对象并对其进行字符串化?

1 个答案:

答案 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