可能重复:
Is Chrome's JavaScript console lazy about evaluating arrays?为什么javascript对象在Chrome,Firefox,Safari的控制台中显示不同的值?
考虑此javascript:
var foo = {bar : 1111};
console.log(foo);
console.log(foo.bar);
foo.bar = 2222;
console.log(foo);
console.log(foo.bar);
在Firefox中的萤火虫,这显示了我本来期望:
Object { bar=1111}
1111
Object { bar=2222}
2222
然而,在Safari和铬的控制台它表明:
Object { bar=2222}
1111
Object { bar=2222}
2222
换句话说,对象被示出,如果打印的打印倾倒,但正确的值的特定属性,当在控制台中错误的属性。
这是一个浏览器的怪癖吗?或者我缺少面向对象的JavaScript的基本方面?
如果我猜,我说的调试器存储用于第一个存储器中的对象的引用,而对于第二个中的值本身。由于您的代码更新了引用,因此正在监视的调试器中的值也会更新。尽管总猜测。 –
最好的猜测是Safari和Chrome正在优化JavaScript,并将赋值与foo.bar与原始对象定义相结合,然后在两个console.log语句中嵌入foo.bar的期望值。 –
感谢迈克和约翰。它确实表明,情况并非如此。 我不得不说,在我眼里这意味着Safari和Chrome在我试图调试时告诉我有关我的代码的谎言!如果我想在执行过程中快速查看代码中两个点包含的内容,那么Safari和Chrome并没有给我一个真实的表示。 也许我的调试程序不够复杂,我不应该依赖代码中的手动console.log行? –