web-dev-qa-db-ja.com

console.logに複数の引数を渡す

私はconsole.logを条件でラップするユーティリティ関数を持っているので、開発環境にいてconsole.logが存在する場合にのみconsole.logを呼び出します。

_/* Console log if environment has debug true or #debug initially passed in URL */
metro.conlog = (function () {
    return function (message) {
        if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
            console.log(message);
        }
    };
}());
_

これは通常のコンソールログでは非常にうまく機能しています。しかし、最近、console.logに複数の引数を渡すことの喜びを発見しました。これにより、コンソールログの先頭に文字列を付けることができるため、console.log('DEBUG', object)は、文字列に加えて、プロパティを拡張できるオブジェクトを出力します検査。これを行うようにconlog関数を変更するにはどうすればよいですか?私はこのようなすべての引数をログアウトしようとしました:

_metro.conlog = (function () {
    return function (message) {
        if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
            console.log(arguments);
        }
    };
}());
_

しかし、これは、console.logで得られるきちんとした行ではなく配列として引数を出力します。このスクリーンショットで違いを確認できます。

enter image description here

元のログ出力を再現する方法を誰かに教えてもらえますか?

18
And Finally

もちろん、それを行うことができます this は、追加オプションを追加して、必要なことを正確に行う方法のデモです。

そしてコードは以下の通りです:

var mylog = (function () {
    return {
        log: function() {
            var args = Array.prototype.slice.call(arguments);
            console.log.apply(console, args);
        },
        warn: function() {
            var args = Array.prototype.slice.call(arguments);
            console.warn.apply(console, args);
        },
        error: function() {
            var args = Array.prototype.slice.call(arguments);
            console.error.apply(console, args);
        }
    }
}());

var name = "Alex";
var arr = [1, 2, 3];
var obj = { a:1, b:2, c:3 };
var hello = function(msg){alert(msg);};
mylog.log("Name: ", name);
mylog.log("Window Debug: ", window);
mylog.error("Some error happened");
mylog.warn("Ahh... Warning", arr, obj);
mylog.log("more parameters: ", arr, obj, hello);
30

このようなものを試してください

/* Console log if environment has debug true or #debug initially passed in URL */
metro.conlog = (function () {
    return function (message, object) {
        if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
            console.log(message, object);
        }
    };
}());

ここで、messageは「DEBUG」のようなものであり、objectは調査するオブジェクトです。

console.logに任意の数の引数を渡せるようにしたい場合は、arguments変数を使用することをお勧めします。

/* Console log if environment has debug true or #debug initially passed in URL */
    metro.conlog = (function () {
        return function (message, object) {
            if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
                console.log(arguments);
            }
        };
    }());

私のコメントで述べたように、これを完全にサポートしているブラウザーはわかりません(私はIEを調べています)。

現在のChrome、FireFox、Safariで動作することをテストして確認しました。

1
Justin Wood