product.JavaScriptコードに "console.log()"コールを残すことは悪い考えですか?


Answers

既に他の人が指摘しているように、いくつかのブラウザでエラーが発生するが、それらのエラーはいくつかのスタブを入れて回避することができる。

しかし、私はそれらをコメントアウトするだけでなく、完全にそれらの行を削除します。 そうでなければ、やっかいなことはやっかいです。 おそらく私は賢明ではありますが、「制作」コードにコメントされた形式でも「デバッグ」コードを含めるべきではないと思います。 コメントを残しておけば、そのコメントは、コードが何をしているのか、その背後にある推論を記述するべきで、無効なコードのブロックではありません。 (ほとんどのコメントは、あなたの縮小プロセスによって自動的に削除されるべきですが、あなたは最小化しています。

また、JavaScriptを使用して数年のうちに、関数に戻って「おい、私はここにコンソールログを残しておきたかった」と思い出すことはできません。 一般的に、私が関数の作業を「完了」し、後でそれに戻らなければならないとき、私はいくつかの他の問題を解決するために戻ってきます。 新しい問題が何であれ、以前の作業のconsole.logを参考にしておけば、初めて問題を発見できたでしょう。 言い換えれば、私が何かに戻ってくると、前回の場合とまったく同じデバッグ情報を必要としないでしょう。

ちょうど私の2セント...幸運!

Question

JavaScriptにはconsole.log()呼び出しがたくさんあります。

本番環境に導入する前にコメントしてください。

私はそのままにしておきたいので、デバッグをやり直す必要がある場合は、後でコメントを削除する必要はありません。 これは悪い考えですか?




私は別の視点を共有すると考えました。 PCIアプリケーションでこの種の出力を外部に見えるようにすると、非対応になります。




誰かを助けてくれることを願っています。私はそれをしばらく前に書きましたが、受け入れられた解決策よりもやや柔軟でした。

もちろん、console.infoなどの他のメソッドを使用すると、エフェクトを複製できます。 ステージング環境で完了したら、デフォルトのC.debugをプロダクション用にfalseに変更するだけで、他のコードを変更する必要がなくなります。

var C = {
    // console wrapper
    debug: true, // global debug on|off
    quietDismiss: false, // may want to just drop, or alert instead
    log: function() {
        if (!C.debug) return false;

        if (typeof console == 'object' && typeof console.log != "undefined") {
            console.log.apply(this, arguments); 
        }
        else {
            if (!C.quietDismiss) {
                var result = "";
                for (var i = 0, l = arguments.length; i < l; i++)
                    result += arguments[i] + " ("+typeof arguments[i]+") ";

                alert(result);
            }
        }
    }
}; // end console wrapper.

// example data and object
var foo = "foo", bar = document.getElementById("divImage");
C.log(foo, bar);

// to surpress alerts on IE w/o a console:
C.quietDismiss = true;
C.log("this won't show if no console");

// to disable console completely everywhere:
C.debug = false;
C.log("this won't show ever");



私の知る限り、以下の45文字よりもconsole.logをスタブする方法はありません。

window.console||(console={log:function(){}});

これは、3つの異なるバージョンのうち最初のもので、どのコンソールメソッドをスタブアウトするかは、小型で、すべてがIE6 +や最新のブラウザでテストされています。

他の2つのバージョンは、さまざまなコンソールメソッドをカバーしています。 1つは4つの基本をカバーし、もう1つはfirebugとwebkitに関するすべての既知のコンソールメソッドをカバーします。 また、できるだけ小さなファイルサイズで。

そのプロジェクトはgithub上にありますhttps : //github.com/andyet/ConsoleDummy.js

コードをさらに最小限に抑える方法があれば、寄付を歓迎します。

- 編集 - 2012年5月16日

私は以来このコードを改良しました。 それでもまだ小さいですが、コンソール出力をオン/オフする機能が追加されています: https : //github.com/HenrikJoreteg/andlog

それはChangelogショーで特集されました




他にも言及しているように、ほとんどのブラウザではエラーが発生します。 Firefox 4ではエラーは発生せず、メッセージはWeb開発者コンソール(Firefox 4の新機能)に記録されます。

私が本当に好きだったそのような間違いに対する回避策は、 &&バグでした:

var de = true;
var bug = function() { console.log.apply(this, arguments); }

// within code
de&&bug(someObject);