Node.js全局方法和工具函数

Node全局属性及常用方法util解析

Posted by wang chong on January 23, 2019

全局对象global

JavaScript中有一个特殊的对象,称为全局对象(Global Object) 它以及其所有属性都可以在程序的任何地方访问。即全局变量。在浏览器中全局对象是window,而在node中全局对象是global,所有的全局变量(global本身除外)都是global对象的属性。

永远使用声明变量以避免引入全局变量,因为全局变量会污染 命令空间,提高代码的耦合风险。

__filename

__filename表示当前正在执行的脚本的文件名,它将输出文件所在位置的绝对路径,且和命令行参数所指的文件名不一定相同.如果在模块中,返回的值是模块的路径。

console.log(__filename);    ///home/chong/桌面/Code/Code/Two/node/node9.js

__dirname

__dirname表示当前执行脚本所在的目录

console.log(__dirname);     ///home/chong/桌面/Code/Code/Two/node

setTimeout(cb,ms)

和浏览器中执行的js代码的setTimeout相同,在指定的毫秒后执行指定函数cb,setTimeout()只执行一次指定函数。返回一个定时器对象。

const timer = setTimeout(()=> {
    console.log('time');
},2000)
console.log(timer);

clearTimeout()

clearTimeout(e) 全局函数用于停止一个之前通过setTimeout创建的定时器,参数t是通过setTimeoit函数创建的定时器对象。

const timer = setTimeout(()=> {
    console.log('timer');
},2000)
clearTimeout(timer);

setInterval(cb,ms)

setInterval(cb,ms)全局函数在指定的毫秒数后执行指定函数(cb),返回一个定时器对象,可以使用clearInterval函数清楚定时器,setInterval方法会不停的调用函数,直到clearInterval被调用或窗口被关闭。

setInterval(()=>{
    console.log('hello');
},1000);

console方法

console方法用于提供控制台的标准输出。

console.log(message)

打印传统的信息

console.log('hello world');

console.error(err)

输出错误信息的。

console.error('error');

console.warn()

输出警告信息

console.warn('这是一个警告');

console.dir(obj)

用于对一个对象进行检查(inspect),以便阅读和打印的格式显示

var obj = {
    name : 123,
    age : 20,
}
console.log(obj);
console.dir(obj);

console.time(label)

输出时间,表示计时开始

console.time('first');

console.timeEnd(label)

结束时间,表示计时结束。

console.timeEnd('first');

console.trace()

当前执行的代码在堆栈中的调用路径,这个测试函数运行很有帮助。只要给想测试的函数里面加入console.trace就可以了。

function foo(){
    bar();
}
function bar(){
    baz()
}
function baz(){
    console.trace();
}
foo();

console.assert()

断言:用于判断某个表达式或变量是否为真,有两个参数,第一个是表达式,第二个是字符串,当第一个表达式为false才会输出第二个参数。

console.assert(true,'message') //不会输出
console.assert(false,'message') //输出message

常用工具

util是一个Nodejs核心模块,提供常用函数的集合,用于弥补核心JavaScript的功能,过于精简的不足。

引入util

const util = require('util');

util.inherits

util.inherits(constructor,superContructor)是一个实现对象间原型继承的函数。

function Car(){
    this.name = 'wang';
}
function Curze(){
    this.type = 'curze';
}
util.inherits(Curze,Car);
const curze = new Curze();
console.log(curze.__proto__.__proto__);     //Car

util.inspect

util.inspect(object,[showHidden],[depth],[colors])是一个将任意对象转化程字符串的方法,通常用于调试和错误输出。它至少接收一个参数object,即要转换的对象。

  1. showHidden是一个可选参数,如果值为true,将会输出更多的隐藏信息。
  2. depth表示最大递归层数,如果对象很复杂,你可以指定层数以控制输出信息的多少。如果不指定depth,默认会递归两层,指定为null表示不限递归赠书完整遍历对象。
  3. 如果color值为true,输出格式将会一ANSI颜色编码,通常用于在终端显示更漂亮的效果。

特别要指出的是,util.inspect并不会简单的直接把对象转换为字符串,即使对象定义了toString方法也不会调用。

const obj = {
    name : 'wang',
    age : 20,
    color: 'red',
}
console.log(util.inspect(obj,true,null,true)); 

util.isArray(object)

如果给定的参数object是一个数组返回true,否则返回false

console.log(util.isArray([]));      //true

util.isRegExp(object)

如果给定的参数object是一个正则表达式返回true,否则返回false

console.log(util.isRegExp(/[]/g));  //true

util.isDate(object)

如果给定的参数object是一个日期返回true,否则返回false

console.log(util.isDate(new Date()));   //true

util.isError(object)

如果给定的参数object是一个错误对象返回true,否则返回false

console.log(util.isError(new Error()));

一个更强大的功能库–underscore.js