旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

[JavaScript] console.logのラッパー方法

2012年2月7日

まずは何故上書きをするのか?

1. "console.log"は常に使うには少々長いし、ドットを含むので記述し難い
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行目の条件分岐式に入れれば良い