Eventuali duplicati:
Is Chrome's JavaScript console lazy about evaluating arrays?Perché l'oggetto javascript mostra valori diversi nella console in Chrome, Firefox, Safari?
considerare questo javascript:
var foo = {bar : 1111};
console.log(foo);
console.log(foo.bar);
foo.bar = 2222;
console.log(foo);
console.log(foo.bar);
In Firebug di Firefox, questo dimostra quello che mi sarei aspettato:
Object { bar=1111}
1111
Object { bar=2222}
2222
Tuttavia, in consolle Safari e Chrome si vede:
Object { bar=2222}
1111
Object { bar=2222}
2222
In altre parole, l'oggetto sta mostrando gli attributi sbagliate nella console quando stampa oggetto di dumping, ma il valore corretto se un attributo specifico viene stampato.
Si tratta di una stranezza dei browser? O un aspetto fondamentale del javascript orientato agli oggetti che mi manca?
Se dovessi indovinare, direi il debugger sta memorizzando un riferimento all'oggetto in memoria per la prima, e lo stesso valore per il secondo. Poiché il codice aggiorna il riferimento, anche il valore nel debugger che si sta guardando viene aggiornato. Prova totale selvaggia però. –
La migliore ipotesi sarebbe che Safari e Chrome stiano ottimizzando JavaScript e combinando l'assegnazione a foo.bar con la definizione dell'oggetto originale, quindi inserendo il valore previsto di foo.bar nelle due istruzioni di console.log. –
Grazie Mike e John. Sembra che sia così, no? Devo dire, ai miei occhi questo significa che Safari e Chrome mi stanno dicendo bugie sul mio codice mentre sto provando a fare il debug! Se voglio vedere rapidamente cosa contiene un oggetto in due punti del codice durante l'esecuzione, Safari e Chrome non mi forniscono una rappresentazione vera. Forse la mia routine di debug non è abbastanza sofisticata e non dovrei affidarmi alle linee manuali di console.log nel codice? –