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

标签 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

所以仍然不清楚这种行为的原因。

最佳答案

JSON.stringify 要求对象属性可字符串化。乍一看,在控制台转储上展开 window.screen__proto__ 部分,可以注意到每个列出的属性实际上都是 getter 函数(如 get availHeight: ƒ availHeight ()) 并像往常一样产生结果。但是 Object.keys(window.screen) 生成空数组,表明所有属性都不可枚举,因此它们无法通过 JSON.stringify 内省(introspection)对象找到。相比之下,您字符串化的 orientation 对象具有默认情况下可枚举的常规属性。

stringify window.screen 是一个属性很少的对象,最简单的方法是每次都调用 getter 创建它的副本,然后 stringify 复制:

var scr = {
    width: window.screen.width,
    height: window.screen.height //... }
JSON.stringify(scr); // --> "{"width":1600,"height":900, ...

关于javascript - 无法将 JavaScript window.screen 对象转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56714046/

相关文章:

javascript - 事件循环、libuv和v8引擎的关系

从鼠标位置拖动Javascript?

html - 如何在台式机上使用 Chrome 测试我的响应式网站的屏幕宽度是否低于 500 像素?

google-chrome - 如何可视化 chrome DevTool 协议(protocol)消息的日志?

python - 如何使用 Selenium 从 devtools Network 面板中检索 "Initiator"字段?

javascript - 使用jquery更新字段不会更新可观察的

javascript - PHP - 读取文本文件时出现问题

javascript - 使用 u2f-api.js 客户端测试

javascript - 使用自动完成的值填充状态( react )

php - JSON 预览在 Chrome 开发工具中不起作用