[JavaScript] console.logのラッパー方法
2012年2月7日
まずは何故上書きをするのか?
1. "console.log"は常に使うには少々長いし、ドットを含むので記述し難い
2. IE8で「console.logがありません」というエラーになることがある
3. デバッグフラグなどで一括して出力を制御したい
・・・というのが理由です
2. IE8で「console.logがありません」というエラーになることがある
3. デバッグフラグなどで一括して出力を制御したい
・・・というのが理由です
※ 2 は普通ならないはずなんだけど発生することがある、原因はワカラン
結論
var debug = function(){
if (typeof console === 'object' && 'log' in window.console) {
try {
return window.console.log.apply(window.console, arguments);
} catch (err) {// For IE
var args = Array.prototype.slice.apply(arguments);
return window.console.log(args.join(' '));
}
}
}
console.log の参照を直接コピーしないのは
Chromeなど一部のブラウザで不正なコードと見なされてエラーになるから
例外処理をしているのは、4行目がIEで動かないため(原因不明)
catch部分は大体同じ出力になるように加工している
2行目の、「console.logがあるのか」の条件判定部分は
IEで console instanceof Object が何故か false になるのと
typeof console.log === ‘function’ も false になるので、今の形に落ち着いた
デバッグフラグを付けたかったら、2行目の条件分岐式に入れれば良い