【问题标题】:Possible to tell if two objects are the same in Chrome debugger?可以判断 Chrome 调试器中的两个对象是否相同?
【发布时间】:2013-07-15 02:47:34
【问题描述】:

在 Eclipse 中,调试器会在每个对象旁边显示一个唯一的会话 ID(无论如何,对于 Java 和 AS3)。这使得识别出现在多个上下文中的相同对象变得简单。

我正在开发一个 JavaScript 项目,并且希望能够在 Chrome 调试器中识别对象(例如,在“范围变量”窗格中)。浏览器/调试器是否跟踪此信息?是否有不同的方法来跨上下文识别对象,而无需添加代码(这是一种纯粹的 IDE 方式,适用于任何上下文)。

【问题讨论】:

标签: javascript debugging object google-chrome-devtools


【解决方案1】:

技术上这是可能的。如果您使用,您可能已经可以看到它 适用于 Java 的 Chrome 开发工具(基于 Eclipse 的调试器)。 http://code.google.com/p/chromedevtools

对于浏览器内调试器,UI 只是缺少用于此的 UI。我想您应该在以下位置提交功能请求: http://crbug.com

附:请注意,这根本不是一个地址——Java 和 JavaScript 都会在随机时刻将它们的对象移动到内存中。

【讨论】:

  • 根据一些谷歌搜索,您似乎对 Eclipse 调试器中的 id 不是内存地址是正确的。我会编辑我的问题,但基本前提仍然存在....感谢 Chromium 功能/错误报告链接。
【解决方案2】:

我相信通过以下方式使用 Chrome 开发工具可以做到这一点:

  1. 在摘要视图中拍摄堆快照并打开控制台
  2. 在控制台中打印对象
  3. 右键单击控制台输出并选择“在摘要视图中显示”(如果您没有看到此选项,则可能是您没有打开配置文件面板)

【讨论】:

  • 试过但不适用于 Chrome 94
【解决方案3】:

JavaScript 没有内存地址。可以使用三等号表示法比较“相同的变量” (anObjectReference === anotherObjectReference)

【讨论】:

  • 对象必须存储在内存中的某个地方。 Chrome 调试器是否可以访问 VM 的内存地址是另一个问题。
  • === 运算符不比较身份,而是比较值和类型。
  • @PiotrDobrogost 如果类型或值不同,那么标识也会不同。否则:(引用 MDN)对于除数字之外的所有值,它使用明显的语义:一个值只等于它自己。所以对于对象来说,它绝对可以用来检查身份是否相等。
  • @ericsoco 我认为“JavaScript 没有内存地址”这句话是完全正确的,因为 JavaScript 是一种语言,并且该语言中没有内存地址的概念。
  • 这方面总是存在混淆。对于对象,== 和 ===,做同样的事情。 “如果两个操作数都是对象,那么当操作数引用内存中的同一个对象时,JavaScript 会比较相等的内部引用” - developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
猜你喜欢
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多