Console.log(array) показывает различное содержимое массива, чем итерация массива и отображение отдельных элементов

У меня есть следующий код:

console.log("start");
for(var i = 0; i < array.length; i++){
    console.log(i + " = " + array[i]);
}
console.log(array);
console.log("end");

Это дает мне следующий результат:

[16:34:41.171] start
[16:34:41.171] 0 = 0
[16:34:41.172] 1 = 168
[16:34:41.172] 2 = 171
[16:34:41.172] [0, 168, 171, 139]
[16:34:41.172] end

То есть он не отображает элемент 139 при итерации массива, но console.log выводит его при выводе всего массива. ЗАЧЕМ? (< - вопрос)

Я модифицирую массив позже, является ли console.log каким-то образом отложенным до тех пор, пока я не изменил массив? Обратите внимание, что изменение порядка инструкций и размещение consoel.log(array) непосредственно в начале не изменяет результат (все еще разные выходы).

Я использую firefox 20.0

Ответ 1

Обновление:. Если вы хотите увидеть это поведение, скопируйте и вставьте код в консоль и выполните. Затем закройте инструменты разработчика и снова откройте, видимо, вещь указателя происходит только тогда, когда код выполняется в фоновом режиме (что происходит при повторном открытии консоли).

Вывод Console.log объектов, является указателем, нет реального значения. Это означает, что если объект изменится позже, объект console.log будет обновлен. Попробуйте:

console.log("start");
var array = [1];
for(var i = 0; i < array.length; i++){
    console.log(i + " = " + array[i]);
}
console.log(array);
console.log("end");
array.push(9999);// you will see the 9999 in the console no matter it was added after the output.

Чтобы предотвратить проблемы с указателем, попробуйте это: console.log(Array.join()); потому что позже в какой-то момент вашего приложения вы добавляете значение 139.