Duplicar posible:
Is Chrome's JavaScript console lazy about evaluating arrays?Error en console.log?
trato el siguiente código:
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);
El resultado es bastante extraño:
* Object
* 3: Object
text: "item-2"
item-1
* Object
* 3: Object
text: "item-2"
item-2
PERO - si ejecuto la segunda parte después de algún tiempo (usando setTimeout), y despliegue el primer objeto, que hacerlo bien, es decir:
* Object
* 3: Object
text: "item-1"
item-1
* Object
* 3: Object
text: "item-2"
item-2
me parece importante compartir, ya que creo que se puede perder mucho tiempo tratando de entender lo que está mal en su código. Y si alguien tiene alguna referencia a un error abierto o algo así, responda este ticket. Gracias!
¿Qué versión de cromo se utiliza? ¿En qué plataforma? Intenté ejecutar el código en mi consola y obtuve la respuesta correcta/lógica –
¿Cómo se llama exactamente con 'setTimeout'? Lo intenté también y obtuve los resultados esperados. – jsalonen
¡No es un error, es una característica! Console.log mantiene la referencia al objeto registrado, por lo que puede obtener una vista previa del objeto en tiempo de ejecución. Si ha cambiado el atributo del objeto, de forma natural este cambio también se muestra en esta vista previa en tiempo real. Puede probar el objeto de exploración para ver que su "jerarquía" es infinitamente profunda, por lo que es imposible almacenarla en caché. – Kasztan