Console.log() показывает противоречивые значения для одного и того же объекта

Думаю, я сойду с ума.

Я использую console.log(), чтобы увидеть состояние объекта, а затем в следующей строке выполните console.log() для определенного свойства одного и того же объекта и получат разные значения для каждого.

Используемый код:

console.log(this.pictures.Items[pic].val);

for(var i in this.pictures.Items[pic].val) {
    console.log("property: %s, value: %s", i, this.pictures.Items[pic].val[i] );
}

и выходы Firebug:

Picture { isLoaded=true, isSelected=false, img_src="imgs/image1.jpg", more...}

property: isLoaded, value: false
...more properties

как вы можете видеть, "isLoaded" имеет значение true при регистрации самого объекта, но false при регистрации свойства.

Я попробовал снова регистрировать объект после на всякий случай, и он снова верен.

Кто-нибудь знает, что здесь происходит?

Спасибо

Рич

Ответ 1

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

Я предполагаю, что это имеет какое-то отношение к тому, что происходит между границами процесса и, возможно, задержка в фактической оценке выражения регистрации до тех пор, пока не изменится фактический объект или индекс, используемые или ссылки. Я видел эту проблему в Chrome точно - не знаю о Firefox.

Вы должны иметь возможность обойти эту конкретную проблему, используя строковую математику, чтобы построить финальную строку. Если только последняя строка передается на console.log(), где все будет полностью оценено, то эта проблема не повлияет на вывод.