2012-10-09 8 views
5

Duplicar posible:
Is Chrome's JavaScript console lazy about evaluating arrays?¿Por qué Chrome muestra un valor como eliminado de una matriz antes de que lo haya sido?

consola de Chrome de JS está mostrando una matriz con un valor eliminado antes de eliminar el valor. ¿Por qué?

jsFiddle that demonstrates this behavior.

var list=[]; 
list.push("one"); 
list.push("two"); 
list.push("three"); 
console.log(list);      //["two", "three", undefined × 1] 
$("#output").append(JSON.stringify(list));//["one","two","three"] 

list.shift(); 

$("#output").append($("<br>")); 

console.log(list);      //["two", "three"] 
$("#output").append(JSON.stringify(list));//["two","three"] 

+0

Puede haber más respuestas autorizadas sobre preguntas similares: http://stackoverflow.com/questions/4198912/bizarre-console-log-behaviour-in-chrome-developer-tools, http://stackoverflow.com/questions/11214430/wrong-value-in-console-log, http://stackoverflow.com/questions/11118758/bug-in-console-log –

+0

http://stackoverflow.com/questions/4057440/is-chromes -javascript-console-lazy-about-evaluating-arrays? lq = 1 –

+0

¿Tenemos un montón de preguntas duplicadas para este problema? –

Respuesta

6

En Chrome console.log se "retrasa"; en este caso, hasta el final del programa, creo.

Es decir, en Chrome, console.logno stringify el objeto de entrada de inmediato sino que realiza la stringification "algún tiempo después" (después de lo cual el objeto se ha modificado en este caso), pero antes de que realidad muestra las resultado,

console.log(JSON.stringify(list)) mostrarán el resultado esperado.


Esto fue informado como un error as far back as Chrome 5 (el objetivo de corrección de errores es Mstone-22, así que no Chrome 20/21?) Y una solución ha sido añadido a la base de webkit:

A partir de hoy, volcar un objeto (matriz) en la consola dará como resultado que las propiedades de los objetos se lean al expandirse el objeto de la consola (es decir, de forma perezosa). Esto significa que volcar el mismo objeto durante la mutación será difícil de depurar usando la consola.

Este cambio comienza a generar vistas previas abreviadas para objetos/matrices en el momento de su registro y pasa esta información a lo largo del front-end. Esto solo ocurre cuando el front-end ya está abierto, solo funciona para console.log(), no para la interacción de consola en vivo.

+0

que de hecho parece ser el caso. ¿Tienes una referencia para eso? –

+0

@ antony.trupe Desafortunadamente, no :( –

+0

Si es un error, ¿debería enviarse a [crbug.com] (http://crbug.com/)? –

Cuestiones relacionadas