声明之前在 Google Chrome 控制台中记录的 Javascript 对象属性 [重复]

Posted

技术标签:

【中文标题】声明之前在 Google Chrome 控制台中记录的 Javascript 对象属性 [重复]【英文标题】:Javascript Object Property logged in Google Chrome Console before Declaration [duplicate] 【发布时间】:2013-08-08 12:57:46 【问题描述】:

我一直在使用Google Chrome version 28.0.1500.95 m 控制台测试一些 javascript,并希望对它的工作原理有更多的了解:看看下面的代码:

var obj = 
    a: 99,
    f: function()  


console.log(obj.a)
console.log(obj.z)    
console.log(obj)

o.z = 100;

Demo

这会输出以下结果:

99 
undefined 
Object a: 99, f: function
a: 99
f: function ()  
z: 100
__proto__: Object

我的问题是,为什么 z 在日志之后才被声明时在结果中可见?

我假设这与控制台的工作方式有关,而不是 JavaScript 中的一些奇怪的范围规则,我不知道?

谁能告诉我这里发生了什么?

【问题讨论】:

【参考方案1】:

控制台中的对象最初显示为Object,并在您单击箭头时展开。

展开对象时有一个 i 图标,当您将其悬停时,您会看到答案:

第一次展开时捕获下面的对象状态

展开后你看到的是对象在展开时的状态,而不是你调用log()时的状态

【讨论】:

大声笑,即使是在 28 版,他们所做的唯一改进就是添加了几乎无法发现的工具提示,说明这种情况正在发生。 我正在进行数组排序:如果它们不同(即:我在这里对数组进行排序),这是否意味着我的脚本逻辑写错了?因为首先显示的顺序与展开列表中显示的顺序不同。 控制台的输出与您的脚本逻辑无关(例如,您可以记录连接的数组以获得日志中的预期顺序) btw-firefox 的功能完全一样

以上是关于声明之前在 Google Chrome 控制台中记录的 Javascript 对象属性 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Google Chrome 控制台中查看所有 JavaScript 变量的列表

如何将 chrome 开发者控制台停靠在左侧?

在 Google Chrome 中清除 javascript 控制台

在 Google Chrome 中获取正确的类型名称 [重复]

为啥可以在 Chrome 的 devtools 控制台中重新声明“让”? (其他浏览器不允许。)

Google Chrome 中的 LargeCommandLine Firebug 控制台