繁体   English   中英

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

[英]Why console.log(window) works but JSON.stringify(window) doesn't work, and how can I beat that?

如果我输入控制台:

 console.log(window)

我通过展开按钮获取window所有对象。

但如果我尝试相同的:

JSON.stringify(window) 

我进入Firefox:

Error: Permission denied to access property 'toJSON'

在铬:

TypeError: Converting circular structure to JSON

这是发生这种情况的唯一情况吗? 并且鉴于console.log()JSON.stringify()工作方式不同,我是否可以访问并仍然对console.log()管理显示的对象进行字符串化?

那是因为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM