此JavaScript代码......
var o = {};
console.dir(o);
o.foo = "bar";
console.dir(o);
...导致两次显示相同的交互式树输出:
此问题作为错误here on Stack Overflow进行了讨论,记录为Chromium bug和WebKit(我想象其他地方)。
我理解这种情况的实现原因,但它使得调试有状态对象变得困难(不使用交互式调试器)。您使用什么策略来记录这种情况,您需要在每个日志调用中查看对象的不同状态? JSON.stringify()
?是否有可以使用的序列化控制台方法?
答案 0 :(得分:2)
我会通过对您正在记录的内容进行“深层复制”并将副本传递给console.dir()来解决此问题。像这样的东西效果很好:
function deep_copy(ref)
{
var r;
var i;
if(isHash(ref))
{
r = {};
for(i in ref)
r[i] = deep_copy(ref[i]);
}
else if(isArray(ref))
{
r = [];
for(i = 0; i < ref.length; i++)
r[i] = deep_copy(ref[i]);
}
else
{
r = ref;
}
return r;
}
如果你不想打扰这样的话,那么使用JSON.stringify
是一个很好的解决方法,如果它在浏览器中是原生的,那就不会慢得多。
console.dir(JSON.parse(JSON.stringify(o));