2015-05-10 1 views
2

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

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 
+0

Это иногда происходит с вложенными _Objects_, потому что поиск консоли может произойти после изменения ссылки. Если это важно, то используйте _JSON_ –

ответ

4

это потому, что в консоли есть ссылка dt не копия.

вы можете скопировать объект и зарегистрировать его (код от this question).

или вы можете записать строку, которая представляет ее, используя JSON.stringify.

console.log(JSON.stringify(dt)); напечатает его как строку.

Смежные вопросы