2010-09-22 24 views
24

Hangi çözümü önerirsiniz, ikincisi daha basittir (daha az kod), ancak kullanımıyla ilgili dezavantajlar var mı?js override console.log tanımlı değilse tanımlı

İlk

: (global hata ayıklama bayrağı Set) İkinci

// 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); 
} 

: geçersiz kılma

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

cevap

53

İkisi de değil, ama ikinci bir varyasyonunu console.log. try...catch Lose ve düzgün konsol nesnenin varlığını kontrol edin:

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

console.log("whatever"); 
+1

Tahminen ya yapmak istiyorum 'this.console = ... 'veya' var konsolu = ... '? Şu anda sahip olduğunuz gibi, ECMAScript 5 katı modda bir hata alırsınız. –

+1

@Tim: Teşekkürler, bir denetimdi. Ben window.console 'taşınabilirlik için en iyi olacağını düşünüyorum. –

+1

Bu kodu, ortamlar arasında taşınabilirlikten ziyade bir işleve taşıyabilme anlamında taşınabilirlik? –

3

DÜZENLEME:Andy's answer yol daha zarif aşağıda gönderdiniz hızlı hack aşıyor. CoffeeScript içinde

Genellikle bu yaklaşımı kullanmak

...

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

Ben senin Frankie sürümünü beğeniyorum, ama tüm tarayıcılarda güvenli bir şekilde çalıştığından emin değilim. Bunu kullanıyorum ve hala IE sürümlerinden biriyle ara sıra sorunları alıyorum, belki de 'konsol' nesnesi sadece IE9'da pencere açıkken tanımlanmış. Andy E'nin önerdiği gibi 'tanımlanmamış' bir kontrol yapmam gerektiğini düşünüyorum. –

+0

@Simon bu bir yorum olarak geç geliyor ama sadece bugün gördüm. Andy'nin çözümü, gönderdiğim bu hızlı hackten çok daha zarif. Bunun yerine kullanmalısın. – Frankie

6

Veya:

:

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

Aşağıdakiler, neye bakıyorsunuz? g için:

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

benim geçmişte benzer bir hata karşılaştık ve aşağıda kodla üstesinden:

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

Bu, Frankie veya Andy_E cevaplarından farklı mıdır? –

+0

Suresh'in yanıtı, log'la birlikte tanımlanmayacak diğer yöntemleri de tanımlaması bakımından daha iyidir. Tanımlanabilecek (veya edilmeyecek) tüm işlevlerin tam listesi için https://developer.mozilla.org/en-US/docs/Web/API/Console adresine bakın. –

+0

Bir işlevden çağrıldığında bu işe yaramaz. Var konsolu yerine 'window.console' veya sadece 'konsol' olmalıdır. –