Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 日期和对象的console.log格式_Javascript - Fatal编程技术网

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,然后使用它:。因为否则,似乎没有办法提供一致的格式。最后,我在任何地方都可以使用它-请参阅更新;)