2010-09-22 110 views
24

您推薦哪種解決方案,第二種解決方案比較簡單(少代碼),但是在使用它時存在缺陷?如果未定義,js會覆蓋console.log

第一:(設置一個全局調試標誌)

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

二:覆蓋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); 

回答

53

都不是,但第二次的變化。失去了try...catch並檢查控制檯對象正確的存在:

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

console.log("whatever"); 
+1

想必你要麼想做'this.console = ...'或'var console = ...'?正如您現在所擁有的那樣,您會在ECMAScript 5嚴格模式下發生錯誤。 – 2010-09-22 09:48:34

+1

@Tim:謝謝,這是一個疏忽。我認爲'window.console'對於可移植性來說是最好的。 – 2010-09-22 09:56:38

+1

可移植性是否能夠將此代碼移入功能,而不是環境之間的可移植性? – 2010-09-22 10:14:35

3

編輯:Andy's answer比快速破解我下面貼的方式更優雅。

我一般都用這個辦法......

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

我喜歡你的版本Frankie,但我不確定它在所有瀏覽器中安全運行。我記得使用這個,並且仍然偶爾遇到IE版本之一的問題,可能是因爲'console'對象僅在IE9中打開控制檯窗口時定義。我想我必須像Andy E建議的那樣進行'未定義'檢查。 – 2011-09-23 02:58:14

+0

@Simon這個評論來得遲,但只是今天才看到。 Andy的解決方案比我發佈的這個快速入侵更爲優雅。您應該使用它。 – Frankie 2013-06-15 16:34:11

6

或者,在CoffeeScript中:

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

以下將實現你正在尋找的東西g下:

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

這與Frankie或Andy_E的答案有什麼不同? – 2014-06-17 13:23:15

+0

Suresh的答案更好,因爲他還定義了其他不會與日誌一起定義的方法。查看https://developer.mozilla.org/en-US/docs/Web/API/Console以獲取可能(或不可以)定義的所有功能的完整列表。 – 2015-09-24 16:40:54

+0

如果從函數內部調用它,這將不起作用。它應該是'window.console'或者'console',而不是'var console' – 2015-11-11 10:54:07