Node.js中的控制台(console)

不知道是不是有很多人跟我一样,在JavaScript编程中,无论是要输出什么都是使用console.log方法,虽然这样也能满足大部分需求,但是使用控制台提供的其他方法可以更加便利。

Node.js里控制台的方法实际上与JavaScript原生的控制台差别不大,所以本文主要讲的是JavaScript中的控制台和Node.js中控制台与JavaScript中的不同。

1. console.log方法

console.log想必写过JavaScript代码的人都知道。这是用于标准输出流输出的方法,类似于C里的printf。

console.log("Hello world");	//Hello world

上面的代码便会向控制台输出一行"Hello world"字符串。
在Node.js中,我们可以对标准输出流进行重定向,使其输出到文件中。例如在命令行中输入(假设上述代码写在app.js文件中):

node app.js 1>test.log

那么我们就可以把app.js中所输出的所有字符串输出到test.log中(1代表重定向标准输出流)。

同时,在Node.js中使用console.info方法与console.log方法是一样的。

2. console.error方法

与console.log方法类似,console.log也是用于输出字符串。区别在于console.error的输出是来自标准错误输出流。

console.error("Having a error here.")	//Having a error here.

同样的,在Node.js中也可以将标准错误输出流进行重定向,那么运行程序产生的任何错误都会被重定向到某个文件中。例如,在命令行窗口中输入(假设上述代码写在app.js文件中):

node app.js 2>error.log

那么我们就可以把app.js中所输出的所有字符串输出到test.log中(2代表重定向标准错误输出流)。

注意是程序运行时的任何错误,例如我们运行一个不存在的文件:

node none.js 2>error.log

运行之后打开error.log,我们将会看到如下内容:

internal/modules/cjs/loader.js:605
    throw err;
    ^

Error: Cannot find module '/Users/Meskjei/none.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:603:15)
    at Function.Module._load (internal/modules/cjs/loader.js:529:25)
    at Function.Module.runMain (internal/modules/cjs/loader.js:776:12)
    at executeUserCode (internal/bootstrap/node.js:342:17)
    at startExecution (internal/bootstrap/node.js:276:5)
    at startup (internal/bootstrap/node.js:227:5)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)

在Node.js中可以使用console.warn方法来代替console.error方法,这两个方法使用时完全相同。

3. console.dir方法

console.dir方法用于查看一个对象中的内容(属性、方法)并输出。下面我定义一个对象,并用console.log和console.dir两种不同的方法来输出这个对象。

let person = {age: 22, name: "Tom"};
console.log(person);	//{ name: 'Tom', age: 22 }
conosle.dir(person);	//{ name: 'Tom', age: 22 }

我们可以发现,两种方法输出的结果似乎是一样的。确实,在命令行控制台中看起来两种方法输出的对象并无区别。可是在Chrome控制台中,两者的区别就很明显了。
在这里插入图片描述

在这里插入图片描述

可以看出来,console.log方法把对象转换成了字符串输出了,而console.dir方法则是直接把对象输出了。

4. console.time和console.timeEnd方法

如果我们需要统计某个算法的运行时间,那么console.time和console.timeEnd就是一个不二选择。

这两个方法都要接受一个字符串作为参数,两个方法的参数要相同,这样才能正确计算出开始与结束之间经过的时间。例如:

console.time('label');
//中间是某个算法
console.timeEnd('label');

输出的结果就会是下面的样子。
在这里插入图片描述

5. console.assert方法

assert,也就是断言。所以console.assert是用来断言一个表达式的结果的,如果该表达式的结果为假,则抛出一个AssertionError类的错误,包含你所指定的错误信息(console.assert方法的第二个参数)。例如:

console.assert(-1>0, 'Have a problem here');

上面的代码将会输出如下图的结果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hjc256/article/details/85918274