chrome 中记录的对象在控制台行中发生变化?

Logged objects in chrome change in a console row?

当您在 chrome 控制台中记录一个对象时,它相当大,您可以选择展开它。

最初,包含对象键的单行在记录的那一刻显示该对象的内容。在这里,我们只有键 a 到 l

如果之后对象发生变化,如添加键m,下拉信息会发生变化,但单行保持不变。

您可以在这个简单的 fiddle 中看到它的发生: https://jsfiddle.net/Lj5naa2c/

var c;
c = {
  a: "abcdefghijklmnopqrstuvwxyz",
  b: "abcdefghijklmnopqrstuvwxyz",
  c: "abcdefghijklmnopqrstuvwxyz",
  d: "abcdefghijklmnopqrstuvwxyz",
  e: "abcdefghijklmnopqrstuvwxyz",
  f: "abcdefghijklmnopqrstuvwxyz",
  g: "abcdefghijklmnopqrstuvwxyz",
  h: "abcdefghijklmnopqrstuvwxyz",
  i: "abcdefghijklmnopqrstuvwxyz",
  j: "abcdefghijklmnopqrstuvwxyz",
  k: "abcdefghijklmnopqrstuvwxyz",
  l: "abcdefghijklmnopqrstuvwxyz"
}
console.log(c)
console.log(c.m)
c.m = "abcdefghijklmnopqrstuvwxyz"

实际上,这在这里引起了一些头痛。这是预期的方式吗? 当对象更新时,单行永远不会更新,所以我们很困惑为什么我们在记录对象后看到一个未定义的但当我们查看它时,它就在那里。

这是故意的。初始日志旁边的小信息气泡详细说明了发生这种情况的原因。日志中显示的对象是日志中的快照。然后在请求时评估下拉列表。因此,如果在您执行下拉列表之前发生了某些变化,那么它将反映在那里,而不是记录时的数据。