Я помогал коллеге отлаживать некоторый код сегодня, и я заметил странное поведение с console.log()
в Google Chrome:
Похоже, что если вы:
-
Создайте вложенный массив (например, [[345, "test" ]])
-
Запишите массив в консоль с помощью
console.log()
. -
Измените одно из значений внутреннего массива, затем
console.log()
выведет значение ниже - not значения массива в момент выполнения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()
выдаст правильные значения.
Есть ли объяснение этому странному явлению или это просто ошибка с Google Chrome?
EDIT:
Я сузил шаги, чтобы воспроизвести непоследовательное поведение console.log()
:
Если вы добавите этот script на свою страницу:
var greetings=['hi','bye'];
console.log(greetings);
setTimeout(function(){
greetings.push('goodbye');
},3000);
и откройте его в новом окне с открытым окном консоли Chrome , то вывод console.log()
будет отличаться, если вы загрузите страницу с закрытым окном strong > . Здесь показан JSFiddle, который показывает.
В первом случае, когда консольное окно уже открыто, console.log()
выведет текущее значение массива (т.е. два элемента).
Во втором случае, когда консольное окно первоначально закрыто и открыто только после загрузки страницы, console.log()
выдаст более поздние значения массива (т.е. три элемента).
Является ли это ошибкой в функциях Google Chrome console.log()
?