今天我正在帮助一位同事调试一些代码,我注意到console.log()
谷歌浏览器中有一个奇怪的行为:
看来,如果你:
创建一个嵌套数组(例如,[[345,"test"]])
使用 将阵列记录到控制台
console.log()
。修改内部数组值之一,然后
console.log()
将输出后面的值——而不是console.log()
执行时数组的值。
JavaScript :
var test = [[2345235345,"test"]]
console.log(test);
test[0][0] = 1111111;
// outputs: [[1111111,"test"]]
var testb = {};
testb.test = "test";
console.log(testb);
testb.test = "sdfgsdfg";
// outputs: {"testb":"test"}
var testc = ["test","test2"];
console.log(testc);
testc[0] = "sdxfsdf";
// outputs: ["test","test2"]
这种行为在 Firefox 中不会发生。
还要注意的是,如果我在 Chrome 调试器中逐行浏览他的代码,那么console.log()
将输出正确的值。
这种奇怪的现象是否有解释,或者只是谷歌浏览器的错误?
编辑:
我缩小了重现不一致console.log()
行为的步骤:
如果您将此脚本添加到您的页面:
var greetings=['hi','bye'];
console.log(greetings);
setTimeout(function(){
greetings.push('goodbye');
},3000);
并在 Chrome控制台窗口已经打开的新窗口中打开它,然后console.log()
输出将与在控制台窗口关闭的情况下加载页面不同。这是一个 JSFiddle,它演示了.
在第一种情况下,控制台窗口已经打开,console.log()
将输出数组的当前值(即两个项目)。
在第二种情况下,控制台窗口最初关闭并仅在页面加载后打开,console.log()
将输出数组的后期值(即三个项目)。
这是 Google Chromeconsole.log()
功能中的错误吗?