2011-11-27 6 views
6

Myślę, że mógłbym oszaleć.console.log() pokazujące sprzeczne wartości dla tej samej właściwości obiektu

Używam console.log(), aby zobaczyć stan obiektu, a następnie w następnym wierszu zrobić console.log() na konkretnej właściwości tego samego obiektu i uzyskać różne wartości dla każdego.

Kod używam jest:

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]); 
} 

i Firebug wyjścia:

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

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

jak widać, 'isLoaded' jest prawdziwe, gdy zalogowaniu sam obiekt, ale fałszem, gdy rejestrowanie własność.

Próbowałem ponownie zalogować obiekt po prostu na wszelki wypadek, i to jest znowu prawda.

Czy ktoś wie, co się tutaj dzieje?

Dzięki

Rich

+0

http://jsfiddle.net/xmvUR/ ... Nie znam rzeczywistej lokalizacji Twojego kodu. Ale jestem pewien, że takich błędów nie ma w JavaScript ... –

Odpowiedz

2

Nie jestem do końca pewien, czy to jest to, co się z tobą dzieje, czy nie, ale console.log() wydaje się mieć pewne problemy w niektórych przeglądarkach, gdzie robi console.log() na wartość lub przy użyciu zmienna indeksująca, która zmienia się lub jest iterowana w tablicy, nie zawsze działa poprawnie.

Domyślam się, że ma to coś wspólnego z sytuacjami, w których odbywa się komunikacja między granicami procesu i być może opóźnieniem w rzeczywistej ocenie wyrażeń logujących, aż do momentu, w którym zmienił się rzeczywisty obiekt lub indeks używany lub odniesiony. Na pewno widziałem ten problem w Chrome - nie wiem o Firefoksie.

Powinieneś być w stanie obejść ten konkretny problem, używając ciągów matematycznych do zbudowania ostatecznego ciągu znaków. Jeśli tylko końcowy ciąg zostanie przekazany do console.log(), gdzie wszystko zostanie w pełni ocenione, problem ten nie wpłynie na wynik.