2010-09-22 14 views
24

¿Qué solución recomienda, la segunda es más simple (menos código), pero existen inconvenientes al usarla?js anula console.log si no está definido

Primero: (Establecer un indicador de depuración mundial)

// the first line of code 
var debug = true; 
try { 
    console.log 
} catch(e) { 
    if(e) { 
     debug=false; 
    } 
}; 
// Then later in the code 
if(debug) { 
    console.log(something); 
} 

Segundo: anulación CONSOLE.LOG

try { 
    console.log 
} catch(e) { 
    if (e) { 
     console.log = function() {} 
    } 
}; 
// And all you need to do in the code is 
console.log(something); 

Respuesta

53

Ni, sino una variante de la segunda. Pierde la try...catch y comprobar la existencia del objeto de la consola correctamente:

if (typeof console == "undefined") { 
    window.console = { 
     log: function() {} 
    }; 
} 

console.log("whatever"); 
+1

Es de suponer que o bien quieren hacer 'this.console = ... 'o' var console = ... '? Como lo tienes en este momento, obtendrías un error en el modo estricto de ECMAScript 5. –

+1

@Tim: gracias, fue un descuido. Creo que 'window.console' sería lo mejor para la portabilidad. –

+1

Portabilidad en el sentido de poder mover este código a una función, en lugar de la portabilidad entre entornos. –

3

EDIT:Andy's answer es mucho más elegante que el truco rápido que he publicado a continuación.

general utilizo este enfoque ...

// prevent console errors on browsers without firebug 
if (!window.console) { 
    window.console = {}; 
    window.console.log = function(){}; 
} 
+1

Me gusta su versión de Frankie, pero no estoy seguro de que funcione de manera segura en todos los navegadores. Recuerdo que usé esto y sigo teniendo problemas ocasionales con una de las versiones de IE, quizás porque el objeto 'console' solo está definido cuando la ventana de la consola está abierta en IE9. Creo que tuve que hacer un control "indefinido" como Andy E sugirió. –

+0

@Simon esto llega tarde como comentario pero solo lo vimos hoy. La solución de Andy es mucho más elegante que este truco rápido que publiqué. Deberías usar eso en su lugar. – Frankie

6

O, en CoffeeScript:

window.console ?= 
    log:-> #patch so console.log() never causes error even in IE. 
0

Lo siguiente logrará lo que está buscando g para:

window.console && console.log('foo'); 
0
window.console = window.console || {}; 
window.console.log = window.console.log || function() {}; 
1

me he enfrentado a un error similar en mi pasado, y lo superé con el código de abajo:

if(!window.console) { 
    var console = { 
     log : function(){}, 
     warn : function(){}, 
     error : function(){}, 
     time : function(){}, 
     timeEnd : function(){} 
    } 
} 
+0

¿En qué se diferencia esto de las respuestas de Frankie o Andy_E? –

+0

La respuesta de Suresh es mejor ya que también está definiendo otros métodos que no se definirán junto con el registro. Consulte https://developer.mozilla.org/en-US/docs/Web/API/Console para obtener una lista completa de todas las funciones que pueden (o no) definirse. –

+0

Esto no funcionará si se llama desde una función. En lugar de 'var console' debería ser' window.console' o simplemente 'console' –