我想将window.screen
属性和值转换为字符串以发送到后端。 (我可以提取每个属性的值,但很好奇理解以下内容失败的原因)
不确定JSON.stringify(window.screen)
为什么返回"{}"
。
请注意,手动创建的对象orientation_
似乎可以将JSON转换为字符串。
__proto__
对象,以为这可能会导致无法转换为字符串。但是奇怪的是我无法删除任何键! 更新#1:
基于以下提示,循环引用可能是问题...
在这里,我们看到变量a
对其自身具有循环引用。使用Flatted(循环JSON解析器),我们看到a
被转换为String,但是window.screen
仍然没有转换。
基于文档JSON.stringify(),函数被字符串化为null
。因此,函数不是问题。
所以仍然不清楚这种现象的原因。
答案 0 :(得分:1)
JSON.stringify
要求对象属性可可字符串化。乍一看,在控制台转储上展开__proto__
的{{1}}部分时,您会注意到,列出的每个属性实际上都是getter函数(如window.screen
),并照常产生结果。但是get availHeight: ƒ availHeight()
会产生一个空数组,表明所有属性都不可枚举,因此Object.keys(window.screen)
也无法发现它们是自省对象。相反,您所字符串化的JSON.stringify
对象具有常规属性,这些属性默认情况下是可枚举的。
将orientation
(具有少量属性的对象)进行字符串化的最简单方法是,使其副本每次都调用getter进行复制,然后对副本进行字符串化:
window.screen