我们如何将value
格式化为字符串以与console.log(value)
的格式一致?
我需要为我正在打印的每个值附加额外的详细信息,而不会破坏console.log
提供的默认格式。对于简单的值很容易,但对于Date
和Object
等类型,它更复杂。
有没有办法让它与console.log
保持一致?换句话说,如何将value
格式化为与console.log(value)
相同的字符串?
我试图实现一个简单的库manakin。这是完整的源代码:
'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和所有浏览器中都能正常工作,请参阅manakin源代码(它很小)。
它需要Node.js和浏览器的不同实现。具体来说,在Node.js下,它使用util.inspect
。
答案 0 :(得分:1)
我相信如果您修改警告中的代码:
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";
}));
};
你拥有自己想要的东西。我通过在控制台中粘贴新代码并记录您拥有的示例来测试它,希望它适合您!