无法将JavaScript window.screen对象转换为字符串

时间:2019-06-22 08:54:11

标签: javascript google-chrome google-chrome-devtools

  • 我想将window.screen属性和值转换为字符串以发送到后端。 (我可以提取每个属性的值,但很好奇理解以下内容失败的原因)

  • 不确定JSON.stringify(window.screen)为什么返回"{}"

  • 请注意,手动创建的对象orientation_似乎可以将JSON转换为字符串。

Google Chrome Console-1


  • 进一步进行实验,我尝试复制对象,然后删除__proto__对象,以为这可能会导致无法转换为字符串。但是奇怪的是我无法删除任何键!

Google Chrome console-2


更新#1:

  1. 基于以下提示,循环引用可能是问题... Console-3 在这里,我们看到变量a对其自身具有循环引用。使用Flatted(循环JSON解析器),我们看到a被转换为String,但是window.screen仍然没有转换。

  2. 基于文档JSON.stringify(),函数被字符串化为null。因此,函数不是问题。

console-6

所以仍然不清楚这种现象的原因。

1 个答案:

答案 0 :(得分:1)

JSON.stringify要求对象属性可可字符串化。乍一看,在控制台转储上展开__proto__的{​​{1}}部分时,您会注意到,列出的每个属性实际上都是getter函数(如window.screen),并照常产生结果。但是get availHeight: ƒ availHeight()会产生一个空数组,表明所有属性都不可枚举,因此Object.keys(window.screen)也无法发现它们是自省对象。相反,您所字符串化的JSON.stringify对象具有常规属性,这些属性默认情况下是可枚举的。

orientation(具有少量属性的对象)进行字符串化的最简单方法是,使其副本每次都调用getter进行复制,然后对副本进行字符串化:

window.screen