Почему console.log отображает неверные значения объекта?

Я не понимаю, почему console.log показывает, что d1 содержит [100,200,300], еще до того, как я ввел эти числа. Однако обычный for loop правильно отображает внутренности d1. Может кто-нибудь объяснить это поведение/ошибку console.log в Google Chrome? https://jsfiddle.net/ZSvyt/

var container = {};
container["0"] = [10, 20, 30];
var d1 = container;

console.log('before console.log');
console.log(d1); // <--- IT DISPLAYS [100, 200, 300]. WHY?

// before for loop
console.log('before for loop');
for (var i = 0; i < d1["0"].length; i++) {
    console.log(d1["0"][i]);
}

container["0"] = [100, 200, 300];

console.log('after console.log');
console.log(d1);

// after for loop
console.log('after for loop');
for (var i = 0; i < d1["0"].length; i++) {
    console.log(d1["0"][i]);
}

Выход:

before console.log
Object {
    0: Array[3]
}
0: Array[3] 
0: 100
1: 200
2: 300 

before for loop
10
20
30

after console.log
Object {
    0: Array[3]
}
0: Array[3] 
0: 100
1: 200
2: 300

after for loop
100
200
300

person yaru    schedule 10.05.2015    source источник
comment
Иногда это происходит с вложенными объектами, потому что поиск в консоли может происходить после изменения ссылки. Если важно, чтобы это было точно, используйте JSON   -  person Paul S.    schedule 10.05.2015
comment
это так сильно меня запутало.. по крайней мере, теперь я знаю   -  person Kareem Kamal    schedule 26.02.2019


Ответы (1)