2010-06-16 18 views
16

Un código muy simple para ilustrar la diferencia.¿Cuál es la diferencia entre console.log() y console.debug() de FireBug?

var x = [0, 3, 1, 2]; 
console.debug('debug', x); 
console.log('log', x); 
// above display the same result 
x.splice(1, 2); 
// below display kind of a different result 
console.debug('debug', x); 
console.log('log', x); 

alt text http://sixbytesunder.com/stuff/firebug_console.png

El valor JavaScript es exactamente el mismo pero console.log() muestra que es un poco diferente que antes de aplicar splice() método. Debido a esto, perdí bastantes horas, ya que pensaba que el empalme se comportaba de forma divertida haciendo que mi matriz fuera multidimensional o algo así.

Solo quiero saber por qué funciona así. ¿Alguien sabe? :)

+0

Como Tim escribe a continuación: "Es más probable que' console.log' y 'console.debug' simplemente se comporten de forma diferente por diseño. La fuente está disponible si tienes curiosidad."También puedes hacer una pregunta en [el grupo de debate de Firebug] (http://groups.google.com/group/firebug) o [presentar un informe de error] (http://code.google.com/p/fbug/ problemas/lista). –

Respuesta

9

Si nos fijamos en la documentación, it says:

La consola conoce cuatro tipos diferentes de mensajes, los cuales se describen a continuación [...]

consulta las API de consola para obtener más información sobre los diferentes comandos .

Una mirada en esa página shows en console.log:

Si se registran los objetos, que habrá escrito texto no como algo estático, sino como hipervínculos interactivos que se pueden hace clic para inspeccionar el objeto en Fichas HTML, CSS, Script o DOM de Firebug.

Por lo tanto, creo que antes de la splice, la matriz es internamente siendo un Array (lo sé, es es una especie de objeto), pero después de la operación, se obtiene un objeto general, al menos internamente . Sé que esta es una explicación débil, pero Firebug tiene un comportamiento más extraño en la consola.

Por cierto, el ECMAScript specification dice nada útil, pero podemos leer en la sección sobre Array.prototype.splice (§ 15.4.4.12):

La función splice es intencionadamente genérica; no requiere que su valor this sea un objeto Array. Por lo tanto, se puede transferir a otros tipos de objetos para su uso como un método . Si la función splice se puede aplicar con éxito a un objeto host depende de la implementación.

+0

Si se aplica a un 'Array' o no,' Array.prototype.splice' siempre devuelve un 'Array'. Eso está en la especificación. –

+0

@Tim: Sí, lo sé, hablé sobre la representación interna de Firefox *, que podría ser diferente de lo que especifica la especificación. –

+2

Firebug está escrito en JavaScript común y XUL. Si bien el JavaScript que se ejecuta en ese entorno tiene acceso a objetos y extensiones que el JavaScript que se ejecuta en la página no lo hace, no puedo imaginar que diverja de la especificación. Lo más probable es que 'console.log' y' console.debug' simplemente se comporten de forma diferente por diseño. La fuente está disponible si tienes curiosidad. –

1

En Firebug 1.6a12 me sale

debug [0, 3, 1, 2] blog.php (line 80) 
log [0, 3, 1, 2] 
debug [0, 2]  blog.php (line 85) 
log [0, 2] 

Las líneas debug() incluir un enlace a la línea de origen de la línea console.debug().

Cuestiones relacionadas