【问题标题】:Passing multiple arguments to console.log将多个参数传递给 console.log
【发布时间】:2013-09-15 18:54:12
【问题描述】:

我有一个用条件包装 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 获得的简洁行。您可以在此屏幕截图中看到不同之处:

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

【问题讨论】:

    标签: javascript console firebug developer-tools


    【解决方案1】:

    当然可以,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);
    

    【讨论】:

    • 是否有任何解决方案可以应用颜色以及记录所有参数?
    • 不错!感谢包含演示链接! :)
    【解决方案2】:

    试试这样的

    /* 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);
                }
            };
        }());
    

    正如我在 cmets 中提到的,我不确定哪些浏览器完全支持这一点(我在看你的 IE)。

    我已经测试并确认它可以在当前的 Chrome、FireFox 和 Safari 中运行。

    【讨论】:

    • 谢谢贾斯汀 - 但如果我通过 metro.conlog('foo') 和 metro.conlog('foo', myObject, anotherObject, 'bar'),这个解决方案会起作用吗?真正的控制台日志?
    • 如果你想这样使用它。您可以只使用console.log(arguments);,它将放置您为函数提供的所有参数。我不确定浏览器的兼容性。我知道它适用于 chrome、firefox 和 safari。我将对我的答案进行编辑。
    • 你想使用console.log.apply(console, arguments)
    • 贾斯汀,我确实尝试过 console.log(arguments),但它没有给我与普通 console.log 相同的结果。哈格巴德,这正是我需要的答案,谢谢!您想将其发布为答案吗?
    猜你喜欢
    • 2016-07-18
    • 2013-01-07
    • 2011-10-10
    • 2010-10-09
    • 2012-09-05
    • 2017-06-14
    • 2018-08-12
    • 2015-11-14
    • 1970-01-01
    相关资源
    最近更新 更多