Eventuali duplicati:
Is Chrome's JavaScript console lazy about evaluating arrays?Bug in console.log?
provo il seguente codice:
var myList = new Object();
var item = new Object();
item.text = "item-1";
myList[3] = item;
console.log(myList);
console.log(myList[3].text);
// Assign another object to the same entry
var item2 = new Object();
item2.text = "item-2";
myList[3] = item2;
console.log(myList);
console.log(myList[3].text);
Il risultato è piuttosto strano:
* Object
* 3: Object
text: "item-2"
item-1
* Object
* 3: Object
text: "item-2"
item-2
MA - se eseguo la seconda parte dopo qualche tempo (usando setTimeout), e aprire il primo oggetto, ho capito bene, vale a dire:
* Object
* 3: Object
text: "item-1"
item-1
* Object
* 3: Object
text: "item-2"
item-2
Trovo importante condividere, poiché credo che una lattina sprecare un sacco di tempo cercando di capire cosa c'è che non va nel suo codice. E se qualcuno ha qualche riferimento a un bug aperto o qualcosa del genere - per favore rispondi a questo ticket. Grazie!
Quale versione di Chrome stai usando? Su quale piattaforma? Ho provato a eseguire il codice nella mia console e ottengo la risposta corretta/logica –
Come l'hai chiamata esattamente con 'setTimeout'? Ho provato anche io e ottenere i risultati attesi. – jsalonen
Non è un bug, è una funzionalità! Console.log mantiene il riferimento all'oggetto registrato, quindi è possibile visualizzare l'anteprima dell'oggetto in runtime. Se avevi cambiato l'attributo dell'oggetto, naturalmente questa modifica viene visualizzata anche in questa anteprima in tempo reale. È possibile provare a sfogliare l'oggetto, per vedere che la sua "gerarchia" è infinitamente profonda, quindi è impossibile memorizzarla nella cache. – Kasztan