2015-09-25 4 views
2

Я путаю, как отображается консоль инструмента разработчика Google Chrome, если (A) является фактическим объектом, созданным в цикле, почему (B) содержит 3 объекта?Создание объекта в объекте

Означает ли это, что (А) будет содержать 3 объекта?

Демо: https://jsfiddle.net/LygmkgLm/

var test={} 
for(var i=0;i<3;i++){ 
    test[i]={} 
    test[i].y="111" 
console.log("test",test) 
} 

enter image description here

+0

могут быть он показывает окончательный значение результата ... –

+0

Наведите указатель мыши на '[i]' в консоли рядом с выходом, и вы узнаете, почему. –

+0

Хром показывает конечное значение переменной –

ответ

5

Вы искажая выход консоли. Он корректно и, как и ожидалось, показывает увеличение содержимого объекта внутри цикла, следовательно, 1, 2 и 3 члена на выходе. В конце, однако, переменная 'test' является полностью заполненным объектом, и когда вы расширяете первую строку, она показывает содержимое во время расширения. Будучи полностью заполненным объектом с 3 детьми.

Ваше замешательство возникает из-за того, что ведение журнала не сохраняет состояние объекта во время регистрации.

+0

Вы объяснили это просто, хотя и старались, чтобы мои слова были простыми в ответ. :) Но я пытался объяснить то же самое. –

+0

Да, ваше объяснение облегчает переваривание. Это было похоже на ведение журнала в реальном времени, но просто больше похоже на симулятор, это действительно эффективно. –

1

Консоль Chrome показывает конечный объект в консоли. Он показывает, какие значения прошли через объект. Итак, в консоли сначала он покажет вам

test Object {0: Object} 

Но когда вы продлеваете, у него будет три объекта, которые прошли через него.

test Object {0: Object}0: Object1: Object2: Object__proto__: Object 

Одна вещь, чтобы отметить, что при первой итерации цикла, вы можете увидеть три объекта в консоли, но только один объект, т.е.

test Object {0: Object} 

фактически доступна. Если вы хотите, чтобы проверить фактическое состояние объекта в каждой итерации, вы должны клонировать его, как показано ниже

var newObject = jQuery.extend(true, {}, test); 

Вот скрипка, которая даст вам представление о моих точках https://jsfiddle.net/qtdurtzc/

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