javascript - ¿Cuál es la diferencia entre window.console.log y console.log
(3)
En un contexto de navegador normal, no hay diferencia. console
es una variable global, y todos los globales son propiedades del objeto window
.
console.log(console.log==window.console.log) // true
Hay algunas advertencias, como cuando no se ejecuta en el navegador, o si la variable de la consola ha sido reasignada. TJ Crowder lo explica muy bien.
Acabo de pasar por una entrevista. La primera pregunta que me hizo fue ¿Qué es console.log()
? Respondí con tanta confianza. De nuevo,
La segunda pregunta era, ¿cuál es la diferencia entre window.console.log()
y console.log()
. Estaba sin palabras. Intenté buscar en Google y Stack Overflow. No encontré una publicación tan útil para entender la diferencia entre ellos.
Cualquier pensamiento es muy apreciado.
No hay diferencia entre window.console.log
y window.console.log
. Tener un cheque en MDN . Ellos citan claramente -
Se puede acceder al objeto de la Consola desde cualquier objeto global, Ventana en los ámbitos de navegación, WorkerGlobalScope y sus variantes específicas en los trabajadores a través de la consola de propiedad. Está expuesto como
Window.console
, y puede ser referenciado simplemente comoconsole
.
Además de esto, la pregunta también puede haber sido:
¿Cuál es la diferencia entre window.console
y window.console
?
La respuesta para esto sería-
console.log
se usa para iniciar sesión (como usted sabe).
window.console
verifica si la consola está disponible (valor truthy
) para que podamos iniciar sesión a continuación (en el caso de los navegadores móviles, no admiten el depurador / consola)
Patrón común en el código para esto es-
window.console && console.log(open_date);
Que es básicamente un código corto para -
if( window.console ) {
console.log( open_date );
}
Si se refiere al entorno de JavaScript del navegador predeterminado, efectivamente no hay una window
y console
provistas que no hayan sido ocultadas o reasignadas.
En el entorno de JavaScript predeterminado del navegador, la window
es un elemento global que hace referencia al objeto global, que también es el objeto de la ventana. El objeto global contiene la mayoría de los globales como propiedades (solía ser todo, pero en ES2015 se modificaron; los globales creados por let
, const
o class
no son propiedades del objeto global). Pero eso no es cierto en la mayoría de los entornos que no son de navegador (NodeJS, por ejemplo, utiliza global
lugar de window
), o incluso en algunos entornos de navegador no predeterminados (como el entorno de un trabajador web, que no tiene window
como pueden) t acceder a la ventana). Por lo tanto, en entornos donde la window
no está definida, window.console.log
fallará donde window.console.log
no lo haría (siempre que el entorno proporcione una console
global).
Para entender la diferencia, trabajemos cada uno de ellos a través de:
console.log(...)
significa:
- El motor de JavaScript tiene que buscar un enlace para la
console
identificadores comenzando con el contexto de ejecución actual, luego el siguiente, luego el siguiente, hasta que lo encuentre en el ámbito global. - Luego busca la propiedad de
log
en el objeto resultante. - Entonces lo llama
window.console.log(...)
significa:
- El motor de JavaScript tiene que buscar un enlace para la
window
identificador comenzando con el contexto de ejecución actual, luego el siguiente, luego el siguiente, hasta que lo encuentre en el ámbito global. - Luego busca la propiedad de la
console
en el objeto resultante. - Luego busca la propiedad de
log
en el objeto resultante. - Entonces lo llama
Entonces, por ejemplo, aquí hay un ejemplo donde la console
ha sido sombreada, y entonces console.log
falla mientras que window.console.log
funciona:
function foo() {
var console = 42;
try {
console.log("You WON''T see this.");
} catch (e) {
}
try {
window.console.log("You WILL see this.");
} catch (e) {
}
}
foo();