console使用指南

本文最后更新于:6 个月前

你真的了解consonle对象吗?

console使用指南

一、nodejs环境下输出复杂对象

在js的世界里面,大家还是会经常手动调试程序的。经常会使用 console.log() 来打印变量,如果要打印的变量是个普通字符串或者数字之类的,那么这里并不会有什么问题。但是,如果它是个复杂对象呢?是不是可能会得到一个 [object] 的提示信息呢?

参考文章:nodejs调试,如何打印一个对象的细节内容?而不是object

  • 青铜版本
1
console.log(obj);

只能输出对象第一层,第二层开始只显示一个[Object]

  • 白银版本
1
console.log('%j', obj);

%j,表示json的意思,只能输出一个变量。

  • 黄金版本
1
console.log(JSON.stringfy(obj))

可以输出多个变量了。

  • 钻石版本
1
console.dir(obj, { depth: 3 });

不仅可以输出对象的深层结构,还可以控制输出的层数。以上四种方法,对于简单的复杂对象输出没有问题,但是遇到一些更复杂的对象,比如出现自身循环嵌套的情况,依然无法输出!

  • 王者版本
1
2
3
const util = require('util')
console.log(util.inspect(obj, false, null, true))
// 三个参数依次为:showHidden、depth、colors

使用nodejs自带的util包,可以输出任何复杂对象!

二、console输出重定向

1
2
3
4
5
const fs = require('fs');

console.output = (...args) => {
fs.appendFileSync('output.log', args.join(' ') + '\n');
};

实际上,使用的是fs的appendFileSync()方法写入文件的

三、log技巧

假设你遇到一个场景,给你 year, month, day 三个变量,让你输出 “某年某月某日” 的字符串

1
console.log(`${year}${month}${day}日`);

你是不是第一时间想到上面这种log方式,但其实还可以这样

1
console.log("%d年%d月%d日", year, month, day);

四、time()和timeEnd()

假设你遇到一个场景,需要查看某一段程序的运行时间

1
2
3
4
5
6
7
8
9
10
let start = Date.now();

const arr = [];
for(let i = 0; i < 100000; i++) {
arr.push({"key": i});
}

let now = Date.now();
console.log('运行时间:', now - start, 'ms');
// 运行时间: 10

你是不是会像上面那样写,但其实可以并不用把 Date 大哥请进来的

1
2
3
4
5
6
7
console.time("运行时间");
const arr = [];
for(let i = 0; i < 100000; i++) {
arr.push({"key": i});
}
console.timeEnd("运行时间");
// 运行时间: 9.302001953125 ms

五、count()

假设你遇到一个场景,需要查看某段代码被调用了几次

1
2
3
4
5
6
7
8
9
10
11
let count = 0;

function func(){
count++;
console.log('func被调用:', count)
// ... 函数代码
}

for(let i = 0; i < 3; i++) {
func();
}

count()其实可以实现上面一样的逻辑

1
2
3
4
5
6
7
function func() {
console.count("func被调用");
}

for(let i = 0; i < 3; i++) {
func();
}

console使用指南
http://timegogo.top/2023/09/03/JavaScript/console使用指南/
作者
丘智聪
发布于
2023年9月3日
更新于
2023年9月10日
许可协议