日期和对象的console.log格式

时间:2016-06-19 23:21:54

标签: javascript

我们如何将value格式化为字符串以与console.log(value)的格式一致?

我需要为我正在打印的每个值附加额外的详细信息,而不会破坏console.log提供的默认格式。对于简单的值很容易,但对于DateObject等类型,它更复杂。

有没有办法让它与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";
        }));
    };

})();

我遇到的问题是类型DateObject输出不同:

// 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

1 个答案:

答案 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";
    }));
};

你拥有自己想要的东西。我通过在控制台中粘贴新代码并记录您拥有的示例来测试它,希望它适合您!