2011-11-27 12 views
6

Penso che potrei impazzire.console.log() che mostra valori contraddittori per la stessa proprietà dell'oggetto

Uso console.log() per vedere lo stato di un oggetto e quindi sulla riga successiva eseguire un console.log() su una particolare proprietà dello stesso oggetto e ottenere valori diversi per ciascuno.

Il codice che sto utilizzando è:

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

e Firebug uscite:

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

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

come si può vedere, 'IsLoaded' è vero quando si accede l'oggetto in sé, ma falsa, quando la registrazione della proprietà.

Ho provato a registrare nuovamente l'oggetto dopo ogni evenienza, ed è di nuovo vero.

Qualcuno sa cosa sta succedendo qui?

Grazie

Rich

+0

http://jsfiddle.net/xmvUR/ ... Non conosco la posizione attuale del codice. Ma sono sicuro che non ci sono tali bug in JavaScript .. –

risposta

2

Io non sono del tutto sicuro se questo è ciò che sta accadendo a voi o no, ma console.log() sembra avere alcuni problemi in alcuni browser, dove facendo un console.log() su un valore o utilizzando una variabile di indice che sta cambiando o viene iterata in un array non sempre funziona correttamente.

La mia ipotesi è che abbia qualcosa a che fare con le operazioni di marshalling tra i confini del processo e forse un ritardo nella valutazione effettiva dell'espressione di log fino a quando il vero oggetto o indice utilizzato o referenziato è cambiato. Di sicuro ho riscontrato questo problema in Chrome: non so su Firefox.

Dovresti essere in grado di aggirare questo particolare problema utilizzando la matematica delle stringhe per creare la stringa finale. Se solo la stringa finale viene passata a console.log() dove tutto è completamente valutato, questo problema non influisce sull'output.

Problemi correlati