2010-09-22 10 views
24

आपको कौन सा समाधान सुझाता है, दूसरा सरल (कम कोड) है, लेकिन इसका उपयोग करने में कमी है?जेएस कंसोल.लॉग ओवरराइड

पहले: (एक वैश्विक डिबग ध्वज सेट)

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

दूसरा: ओवरराइड

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

उत्तर

53

न तो है, लेकिन दूसरे की भिन्नता console.log। try...catch खो देते हैं और सांत्वना वस्तु ठीक से के होने की जाँच:

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

console.log("whatever"); 
+1

मुमकिन है कि आप या तो क्या करना चाहते हैं 'this.console = ... 'या' var console = ... '? जैसा कि इस समय आपके पास है, आपको ईसीएमएस्क्रिप्ट 5 सख्त मोड में एक त्रुटि मिलेगी। –

+1

@ टिम: धन्यवाद, यह एक निरीक्षण था। मुझे लगता है कि 'window.console' पोर्टेबिलिटी के लिए सबसे अच्छा होगा। –

+1

पर्यावरण के बीच पोर्टेबिलिटी के बजाए, इस कोड को फ़ंक्शन में स्थानांतरित करने में सक्षम होने की भावना में पोर्टेबिलिटी? –

3

संपादित करें:Andy's answer रास्ता त्वरित हैक मैं नीचे पोस्ट किया है की तुलना में अधिक सुंदर है।

मैं आम तौर पर इस दृष्टिकोण का उपयोग ...

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

मुझे आपके संस्करण फ्रेंकी पसंद है, लेकिन मुझे यकीन नहीं है कि यह सभी ब्राउज़रों में सुरक्षित रूप से काम करता है। मुझे इसका उपयोग याद है और अभी भी आईई संस्करणों में से किसी एक के साथ कभी-कभी समस्याएं मिल रही हैं, शायद क्योंकि 'कंसोल' ऑब्जेक्ट केवल तभी परिभाषित किया जाता है जब कंसोल विंडो IE9 में खुलती है। मुझे लगता है कि मुझे एंडी ई की तरह एक 'अपरिभाषित' चेक करना था। –

+0

@ सिमन यह एक टिप्पणी के रूप में देर से आता है लेकिन केवल आज इसे देखा। एंडी का समाधान मैंने पोस्ट किए गए इस त्वरित हैक से कहीं अधिक सुरुचिपूर्ण है। इसके बजाय आपको इसका इस्तेमाल करना चाहिए। – Frankie

6

या, coffeescript में:

:

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

निम्नलिखित जो आप देख रहे हैं उसे प्राप्त करेंगे जी के लिए:

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

मैं अपने अतीत में एक समान बग का सामना करना पड़ा है, और मैं नीचे दिए गए कोड के साथ विजय:

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

यह फ्रेंकी या एंडी_ई उत्तरों से अलग कैसे है? –

+0

सुरेश का उत्तर बेहतर है कि वह अन्य विधियों को भी परिभाषित कर रहा है जिन्हें लॉग के साथ परिभाषित नहीं किया जाएगा। सभी कार्यों की पूरी सूची के लिए https://developer.mozilla.org/en-US/docs/Web/API/Console देखें (या नहीं) परिभाषित किया जा सकता है। –

+0

यह काम नहीं करेगा अगर इसे किसी फ़ंक्शन के भीतर से बुलाया जाता है। 'Var console 'के बजाय यह' window.console' या बस' console 'होना चाहिए –