首页 文章

将多个参数传递给console.log

提问于
浏览
14

我有一个实用程序函数,用一个条件包装console.log,所以如果我们在dev环境中并且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

谁能告诉我如何重现原始日志输出?

2 回答

  • 26

    当然你可以做到,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);
    
  • 1

    尝试这样的事情

    /* 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 .

相关问题