将多个参数传递给 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的主要内容,如果未能解决你的问题,请参考以下文章