Javascript 日期和对象的console.log格式
我们如何将Javascript 日期和对象的console.log格式,javascript,Javascript,我们如何将值格式化为字符串,以与console.log(value)的方式一致 我需要在打印的每个值上附加额外的细节,而不破坏console.log提供的默认格式。对于简单的值很容易,但是对于Date和Object等类型,则更为复杂 是否有办法使其与控制台日志一致?换句话说,如何将值格式化为与我们从控制台.log(value)获得的字符串相同的字符串 我正在尝试实现一个简单的库。以下是完整的源代码: 'use strict'; (function () { var error =
值
格式化为字符串,以与console.log(value)
的方式一致
我需要在打印的每个值上附加额外的细节,而不破坏console.log
提供的默认格式。对于简单的值很容易,但是对于Date
和Object
等类型,则更为复杂
是否有办法使其与控制台日志一致?换句话说,如何将值
格式化为与我们从控制台.log(value)
获得的字符串相同的字符串
我正在尝试实现一个简单的库。以下是完整的源代码:
'use strict';
(function () {
var error = console.error, warn = console.warn;
console.error = function () {
var a = arguments;
error.apply(this, Object.keys(a).map(function (key) {
return "\u001b[31m" + a[key] + "\u001b[0m";
}));
};
console.warn = function () {
var a = arguments;
warn.apply(this, Object.keys(a).map(function (key) {
return "\u001b[33m" + a[key] + "\u001b[0m";
}));
};
})();
我遇到的问题是,对于类型Date
和Object
,输出是不同的:
// without manakin:
console.warn({value: 1});
//=> { value: 1 }
// with manakin:
console.warn({value: 1});
//=> [object Object]
我想让它保持一致
已解决 最后,我找到了如何在Node.js和所有浏览器中都能工作的方法,请参阅源代码(它很小)
Node.js和浏览器需要不同的实现。特别是在Node.js下,它使用
util.inspect
我相信如果您将warn中的代码修改为:
console.warn = function () {
var a = arguments;
warn.apply(this, Object.keys(a).map(function (key) {
if (a[key] instanceof Date) {
return "\u001b[33m" + a[key].toString() + "\u001b[0m";
}
return "\u001b[33m" + JSON.stringify(a[key]) + "\u001b[0m";
}));
};
你有你想要的。我通过在控制台中粘贴新代码并记录您的示例来测试它,希望对您有用 你能展示一个示例输出吗?@JordanHendrix我已经添加了完整的代码;)简而言之;如果
console.log
类似于printf
,那么OP需要sprintf
。我也认为这种方法,但对于日期,JSON.stringify
以RFC3339格式返回它们,而console.log
以RFC1123格式打印它们。可能检查日期的[key]实例a,如果为true,则使用a[key].toString()
。但是JSON.stringify
的输出与console.log
格式仍有很大的不同。我想我只将其设置为Node.js,然后使用它:。因为否则,似乎没有办法提供一致的格式。最后,我在任何地方都可以使用它-请参阅更新;)