Javascript 受海森堡原理影响的Chrome控制台输出

Javascript 受海森堡原理影响的Chrome控制台输出,javascript,google-chrome,Javascript,Google Chrome,我在chrome的控制台中发现了这种奇怪的行为,我想知道这是否是故意的,如果是,目的是什么 举例说明: 让我们从你期望的行为开始。从上图开始,单击“对象”线旁边的箭头将其展开。然后可以让它保持打开或重新关闭。重要的是你要把它展开一次。现在继续: 正如您所看到的,我们更改了对象某个键的值,但打印在上面的对象不会像预期的那样受到我们的更改的影响 现在清理控制台,重新开始实验。键入相同的行以创建对象“o”,并用循环填充其属性。但是,这一次,不要在关键线处展开对象。相反,直接继续执行下一个命令,该命

我在chrome的控制台中发现了这种奇怪的行为,我想知道这是否是故意的,如果是,目的是什么

举例说明:

让我们从你期望的行为开始。从上图开始,单击“对象”线旁边的箭头将其展开。然后可以让它保持打开或重新关闭。重要的是你要把它展开一次。现在继续:

正如您所看到的,我们更改了对象某个键的值,但打印在上面的对象不会像预期的那样受到我们的更改的影响

现在清理控制台,重新开始实验。键入相同的行以创建对象“o”,并用循环填充其属性。但是,这一次,不要在关键线处展开对象。相反,直接继续执行下一个命令,该命令将更改属性“x7”的值。仅在执行此操作后,现在才能返回到关键线处展开对象的步骤。一个好的惊喜会等着你:


未来改变了过去

这里没有什么神秘之处。在展开时检索属性。在更改了下面的属性后,您将上面的引用扩展到了对象。

这里没有什么神秘之处。在展开时检索属性。您在更改了对象下面的属性后,将上面的引用扩展到了对象。

我无法复制这些结果……认为与控制台交互会更新它显示的对象以匹配它们的值是不合理的吗?@BryceHanscomb,但它并没有像第一个示例所示那样一致地这样做。因此,这不是保持一切同步的情况。我相信Yuriy的回答是有道理的。我无法复制这些结果……认为与控制台交互会更新它显示的对象以匹配它们的值,这是不合理的吗?@BryceHanscomb,但正如第一个示例所示,这样做并不一致。因此,这不是保持一切同步的情况。我相信尤里的回答是有道理的。为什么呢?演出因为如果您使用控制台语句进行调试,这种行为实际上会阻碍您的工作。有没有办法把它关掉?或者我需要使用JSON.parse来输出对象字符串吗?@Jonah这是关于不必要的操作。这是一个懒惰对象的概念。只根据需要进行计算。@DivinusVox,对,这是有意义的,尽管正如我所说的,它确实使我的调试工作失败了tonight@Jonah我想从这个意义上说,这是一个很好的了解。如果你没有意识到,懒惰的物体会咬你。保存状态的最佳方法是在记录对象时序列化该对象,如果您需要了解它如何随时间变化的话。我很惊讶这是任何浏览器控制台的默认行为。如果您
console.log()
一个属性少于
n
的对象,它将拍摄快照。但是,如果您的对象具有
n+
属性,它将记录一个引用!完全疯了!为什么呢?演出因为如果您使用控制台语句进行调试,这种行为实际上会阻碍您的工作。有没有办法把它关掉?或者我需要使用JSON.parse来输出对象字符串吗?@Jonah这是关于不必要的操作。这是一个懒惰对象的概念。只根据需要进行计算。@DivinusVox,对,这是有意义的,尽管正如我所说的,它确实使我的调试工作失败了tonight@Jonah我想从这个意义上说,这是一个很好的了解。如果你没有意识到,懒惰的物体会咬你。保存状态的最佳方法是在记录对象时序列化该对象,如果您需要了解它如何随时间变化的话。我很惊讶这是任何浏览器控制台的默认行为。如果您
console.log()
一个属性少于
n
的对象,它将拍摄快照。但是,如果您的对象具有
n+
属性,它将记录一个引用!完全疯了!