将多个参数传递给 console.log

Posted

技术标签:

【中文标题】将多个参数传递给 console.log【英文标题】:Passing multiple arguments to 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('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 获得的简洁行。您可以在此屏幕截图中看到不同之处:

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

【问题讨论】:

【参考方案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 相同的结果。哈格巴德,这正是我需要的答案,谢谢!您想将其发布为答案吗?

以上是关于将多个参数传递给 console.log的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个重复的参数传递给 CUDA 内核

将多个参数传递给后端 API reactjs

将多个参数传递给表值函数

使用颤振将多个参数传递给命名路由

如何将多个参数传递给 Process?

调用如何将其参数传递给内部函数? [复制]