Javascript 使console.log在Google Chrome中同步工作

Javascript 使console.log在Google Chrome中同步工作,javascript,google-chrome,pass-by-reference,console.log,Javascript,Google Chrome,Pass By Reference,Console.log,在GoogleChrome中,以下代码段 var array = [{a: 0}]; console.log(array); array[0].a = 1; 输出[{a:1}](使用Stackoverflow代码段时不会输出,但请在上查看) 我怀疑这是因为console.log是在Chrome中异步实现的,数组是通过引用存储的。我注意到,console.table()这样工作很好 是否有任何方法可以使console.log()执行相同的操作?控制台日志包含对对象的引用,它不会克隆对象,而只是将

在GoogleChrome中,以下代码段

var array = [{a: 0}];
console.log(array);
array[0].a = 1;
输出
[{a:1}]
(使用Stackoverflow代码段时不会输出,但请在上查看)

我怀疑这是因为
console.log
是在Chrome中异步实现的,数组是通过引用存储的。我注意到,
console.table()
这样工作很好


是否有任何方法可以使
console.log()
执行相同的操作?

控制台日志包含对对象的引用,它不会克隆对象,而只是将其打印到控制台。那太荒谬了。如果您想记住该状态,您需要对该对象进行
JSON.stringify
或手动深度克隆

编辑: 它是同步的。刷新视图时,UI将重新绘制。我的意思是,如果你点击三角形


如果要记录对象的副本,当无法控制何时单击控制台中的箭头时,这一点尤其有用

如果对象包含JSON友好类型
console.log(JSON.parse(JSON.stringify(a))
将起作用


将有助于处理更复杂的对象。

True,但如果同步实现了
console.log
,那么它输出引用就无关紧要了。此外,这也不适用于具有循环引用的对象,在几个月(几年?)内“这将是荒谬的”以前,i图标提供了一个选项来显示记录时的值。没有那么荒谬。它显示了它的值,因为UI根本没有更新。如果对象包含循环引用,这将不起作用,而循环引用可能会变得有点复杂,并且通常更容易使用第三方库,如。请参阅文章中的链接。这是一个重复的问题。Console.log是同步的,只更新引用。@ShyamBabu如果是同步的(如在它中阻止执行直到完成),则不会
Console.log()
在继续并更改下一行的引用之前输出初始值?否,这不是console.log是异步的或同步的问题。这是在尝试预览时更新初始conosole.log之后的UI值。如果在节点REPL中尝试此操作,则不会出现此行为。