在谷歌浏览器中,以下代码段
var array = [{a: 0}];
console.log(array);
array[0].a = 1;
输出[{a: 1}]
(在使用Stackoverflow Snippet时没有,但在JsFiddle上查看)
我怀疑这是因为console.log
在Chrome中是异步实现的,并且数组是通过引用存储的。我注意到console.table()
以这种方式工作正常。
有没有办法让console.log()
做同样的事情?
答案 0 :(得分:0)
控制台日志包含对象的引用,它不会克隆它只是为了将其打印到控制台。那太荒谬了。如果你想记住状态,你需要JSON.stringify
对象,或者手动深度克隆它。
修改强>: 它是同步的。刷新视图时,UI会重绘。我是说,例如如果你点击三角形。
答案 1 :(得分:0)
您想要记录对象的副本,当您无法控制何时单击控制台中的箭头时,此功能尤其有用。
如果对象包含JSON友好类型console.log(JSON.parse(JSON.stringify(a))
将起作用。
How to Deep clone in javascript将有助于处理更复杂的对象。